我是perl的新手。
我想说变量可以取2个值,然后我从另一个函数调用它。
我试过了:
my(@file) = <${dirname}/*.txt || ${dirname}/*.xml> ;
但这似乎不适用于第二个值,有什么建议吗?
答案 0 :(得分:6)
使用<*>
运算符作为fileglob运算符时,可以使用任何常见的glob模式。可用的模式是
*
(任意数量的任何字符),?
(任何单个字符),{a,b,c}
(任何a
,b
或c
模式),所以你可以做到
my @file = glob "$dirname/*.{txt,xml}";
或
my @file = (glob("$dirname/*.txt"), glob("$dirname/*.xml"));
或
my @file = glob "$dirname/*.txt $dirname/*.xml";
因为glob模式在空白处分成子模式
答案 1 :(得分:1)
如果我理解正确,如果找不到@files
文件,您希望*.xml
回退第二个选项(*.txt
)。
如果是这样,您的语法就很接近了。它应该是:
my @files = <$dirname/*.txt> || <$dirname/*.xml>;
或
my @files = glob( "$dirname/*.txt" ) || glob( "$dirname/*.xml" );
此外,最好检查@files
以确保其已填充(如果您没有*.txt
或*.xml
,该怎么办?)
warn 'No @files' unless @files;
答案 2 :(得分:0)
my(@file) = <${dirname}/*.txt>, <${dirname}/*.xml> ;
&LT;&GT;将它转换为文件名数组,所以你基本上是在做@file = @ array1,@ array2。这将首先通过txt文件迭代,然后通过xml文件。
答案 3 :(得分:0)
my (@file) = (<${dirname}/*.txt>, <${dirname}/*.xml>);
答案 4 :(得分:0)
这有效
my $file = $val1 || $val2;
这意味着将$ file设置为$ val1,但如果$ val1为0或false或undef,则将$ file1设置为$ val2
实质上,用< >
包围变量意味着
1)将其视为文件句柄(例如$read=<$filehandle>
)
2)将它用作shell glob(例如@files=<*.xml>
)
在我看来,您希望插入值$ dirname并在末尾添加.txt或.xml。 &lt; &GT;不会实现这个
如果您希望向函数发送两个值,那么这可能是您想要的
my @file=("$dirname.txt","$dirname.xml");
然后用@file调用该函数,即myfunction(@file)
在功能
中sub myfunction {
my $file1=shift;
my $file2=shift;
所有这些东西都包含在perldocs perlsub和perldata中
玩得开心