2011-06-13 76 views
1

我有这个Perl脚本,它使用getoption包的参数。perl,保存命令行选项

有没有简单的方法来记录用户执行的确切命令是什么?

我想将文档记录到日志文件中。

戈登

回答

7

使用$0@ARGV在一起:

+5

根据http://stackoverflow.com/questions/4739359/calling-perl-getoptions-两倍不工作如预期/ 4739389#4739389,值得注意的是'GetOptions'可能会修改'@ ARGV'。如果是这种情况,那么在使用'GetOptions'之前,您需要在其他地方存储原始的'@ ARGV'。 – 2011-06-13 18:04:40

+3

如果您设置$ full_command = join('',$ 0,@ARGV);在BEGIN {}块内检查@ARGV,然后Getopt :: Long将有机会破坏它。只需确保在脚本的前面声明'my $ full_command',而不是BEGIN {}块的物理位置。 – DavidO 2011-06-13 18:35:05

+1

@DavidO,除非您在BEGIN块中调用'GetOptions',否则不需要BEGIN块。简单加载Getopt :: Long不会对'@ ARGV'做任何事情。 – cjm 2011-06-13 20:34:35

5

,或者你可以简单地

my $full; 
BEGIN { $full = "$0 @ARGV" } 
# 
print "log: $full\n"; 

form the perlvar

$LIST_SEPARATOR 
$" 

当将数组或片段片段插入到双引号 字符串或类似上下文(如 /.../)中时,其元素之间用 这个值分隔。默认是一个空格。对于 例如,这样的:

print "The array is: @array\n"; 

等效于此:

print "The array is: " . join($", @array) . "\n"; 
+0

“@ ARGV”会不会与所有的空间一起? – 2011-06-13 20:39:04

+0

试试吧。 ;)将加入默认分隔符。 – jm666 2011-06-13 20:41:12

+0

那么,这是我的观点 - 什么是默认分隔符? perlvar说'undef'。 – 2011-06-13 20:49:32