2015-09-20 143 views
0

可以将命令行参数保存到文件中,然后将文件传递给perl以解析出选项?与某些Microsoft工具类似的响应文件(以@开头的名称)。将命令行参数传递给perl通过文件?

+0

像'perl $(cat options.txt)prog.pl'? – melpomene

+3

这是一个奇怪的要求。你想用这个解决什么问题?可能有更好的解决方案。 – Schwern

+0

''xargs -a file.txt perl ...'不像@ melpomene的解决方案那样处理参数中的空白。如果你在参数中需要换行符,请看'xargs -0'。这并不是Perl特有的(但对于类似Unux的shell有一些特定的含义)。 – tripleee

回答

2

我想通过命令行将表达式传递给perl,就像perl -e'print“\ n”',并且Windows命令提示符使得双引号有点难。

有几种解决方案,从大多数到最不可取。

写你的程序文件

如果一个衬垫过大或复杂的,它写入一个文件并运行它。这可以避免与shell转义混淆。您可以重新使用它并调试它并在真实的编辑器中工作。

perl path\to\some_program 

的命令行选项到perl可以放在否则无用的Windows #!线。这是一个例子。

#!/usr/bin/perl -i.bak -p 

# -i.bak Backs up the file. 
# -p Puts each line into $_ and writes out the new value of $_. 
# So this changes all instances in a file of " with '. 
s{"}{'}g; 

使用替代引号分隔

Perl has a slew of alternative ways to write quotes。改用它们。这对于一个衬垫以及诸如q[<tag key='value'>]之类的东西都是好的。

perl -e "print qq[\n]" 

逃离报价

^ is the cmd.exe escape character。所以^"被视为字面引用。

perl -e "print ^"\n^"" 

很可怜。当您需要打印字面引号时,我更愿意使用qq[]并保留^"

perl -e "print qq[^"\n]" 

使用ASCII码

The ASCII and UTF-8 hex code for " is 22。你可以通过qq[\x22]将它提供给Perl。

perl -e "print qq[\x22\n]" 
0

可以读取文件转换成字符串,然后使用

use Getopt::Long qw(GetOptionsFromString); 
    $ret = GetOptionsFromString($string, ...); 

解析从该选项。

+0

请注意,这些是您的脚本的选项,而不是perl本身。 – melpomene

相关问题