如何使用“或”运算符为变量赋值?

时间:2013-04-30 09:39:10

标签: perl

我是perl的新手。

我想说变量可以取2个值,然后我从另一个函数调用它。

我试过了:

  my(@file) = <${dirname}/*.txt || ${dirname}/*.xml> ;

但这似乎不适用于第二个值,有什么建议吗?

5 个答案:

答案 0 :(得分:6)

使用<*>运算符作为fileglob运算符时,可以使用任何常见的glob模式。可用的模式是

  • *(任意数量的任何字符),
  • ?(任何单个字符),
  • {a,b,c}(任何abc模式),

所以你可以做到

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中

玩得开心