perl,保存命令行选项

Gor*_*don 1 perl

我有这个perl脚本,它使用getoption包接收参数.

有没有一种简单的方法来记录用户执行的确切命令?

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

戈登

Pla*_*ure 7

使用$0@ARGV在一起:

my $full_command = join(' ', $0, @ARGV);
Run Code Online (Sandbox Code Playgroud)

  • 根据http://stackoverflow.com/questions/4739359/calling-perl-getoptions-twice-does-not-work-as-expected/4739389#4739389,值得注意的是`GetOptions`可能会修改`@ ARGV`.如果是这种情况,您需要在使用`GetOptions`之前将原始的`@ ARGV`存储在其他地方. (5认同)
  • 这个答案的一个大问题是`@ ARGV`中的任何空格都会出现分开的参数.也就是说,你无法区分`foo bar`和`'foo bar'`(2个参数或1个带空格的参数).您可以使用[String :: ShellQuote](http://search.cpan.org/perldoc?String::ShellQuote)来解决这个问题. (5认同)
  • 如果设置$ full_command = join('',$ 0,@ ARGV); 在BEGIN {}块内,它会在Getopt :: Long有机会毁掉它之前检查@ARGV.只需确保在脚本中声明'my $ full_command'而不是BEGIN {}块的物理位置. (3认同)

jm6*_*666 5

或者你可以简单地

my $full;
BEGIN { $full = "$0 @ARGV" }
#
print "log: $full\n";
Run Code Online (Sandbox Code Playgroud)

形成perlvar

$LIST_SEPARATOR
$"
Run Code Online (Sandbox Code Playgroud)

当数组或数组切片内插到双引号字符串或类似的上下文(如/.../)时,其元素由此值分隔.默认是一个空格.例如,这个:

print "The array is: @array\n";
Run Code Online (Sandbox Code Playgroud)

相当于:

print "The array is: " . join($", @array) . "\n";
Run Code Online (Sandbox Code Playgroud)