我是 perl 的新手。
我想说一个变量可以取 2 个值,然后我从另一个函数调用它。
我试过了:
my(@file) = <${dirname}/*.txt || ${dirname}/*.xml> ;
但这似乎不适用于第二个值,有什么建议吗?
我是 perl 的新手。
我想说一个变量可以取 2 个值,然后我从另一个函数调用它。
我试过了:
my(@file) = <${dirname}/*.txt || ${dirname}/*.xml> ;
但这似乎不适用于第二个值,有什么建议吗?
将<*>
运算符用作 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 模式在空白处被拆分为子模式
如果我理解正确,如果没有找到文件,您想@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;
my (@file) = (<${dirname}/*.txt>, <${dirname}/*.xml>);
这有效
my $file = $val1 || $val2;
这意味着将 $file 设置为 $val1,但如果 $val1 为 0 或 false 或 undef,则将 $file1 设置为 $val2
本质上,用变量包围< >
意味着要么
1)将其视为文件句柄(例如$read=<$filehandle>
)
2) 将其用作 shell glob ( 例如@files=<*.xml>
)
在我看来,您希望插入值 $dirname 并在末尾添加 .txt 或 .xml 。< > 不会实现这一点
如果您希望向函数发送两个值,那么这可能就是您想要的
my @file=("$dirname.txt","$dirname.xml");
然后用@file调用函数,即myfunction(@file)
在函数中
sub myfunction {
my $file1=shift;
my $file2=shift;
所有这些东西都包含在 perldocs perlsub 和 perldata
玩得开心
my(@file) = <${dirname}/*.txt>, <${dirname}/*.xml> ;
<> 将其转换为文件名数组,因此您实际上是在执行我的@file = @array1,@array2。这将首先遍历 txt 文件,然后遍历 xml 文件。