2011-06-13 71 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