2013-10-24 35 views
1

我使用GetOptions作爲我的Perl代碼中的開關。我有一個需要由特殊字符分隔的數組。目前我可以編寫下面的代碼。如何引用特殊字符的getoptions?

&GetOptions ('sep:i'); if ($opt_sep){ $sep = "\.";}
else {$sep = "\/";}

時應用此-sep 1,我的輸出將是Flower.Red.Small,無本聲明或-sep 0,我的輸出將是Flower/Red/Small。任何想法確切指的是用戶定義的分離我的輸出語句中的任何特殊字符?分隔符可以是# @^* & % ; -的任何字符。提前感謝。

+1

無關你的主要問題,但提供了默認的選項是通過做得更好:'我的%OPTS =(SEP => 「\ /」); &GetOptions(\%opt,'sep:i');'然後在代碼的其餘部分簡單地使用'$ opt {sep}'。 – DVK

+1

只是一個建議:在子程序調用的開始,你不需要使用&。你可以寫GetOptions(...) – szabgab

+0

@DVK,我指的是整數的權利?如果我指定'sep:i',特殊字符無效? – annel

回答

1

你問以下?

my @fields = split /\Q$opt_sep/, $str; 
0

可以使用s(串),而不是i(整數)。請參閱Getopt::Long

use warnings; 
use strict; 
use Getopt::Long qw(GetOptions); 

my %opt = (sep => '/'); 
GetOptions(\%opt, 'sep=s'); 

my @stuff = qw(Flower Red Small); 
print join($opt{sep}, @stuff), "\n"; 

__END__ 

script.pl -sep/
Flower/Red/Small 

script.pl -sep . 
Flower.Red.Small 

script.pl -sep @ 
[email protected]@Small 
+0

不知何故,我得到了未知的選項。 – annel