我真的是 Perl 的新手。我有以下...
#!/usr/bin/perl
#config file
$config = "$ENV{'HOME'}/.config/.wallpaperrc";
open my $handle, '<', $config;
chomp(my @lines = <$handle>);
close $handle;
@regular = map(/^regular\.roll (.*)$/, @lines);
print(@regular);
它有效,但是当我只期待一场比赛并且只想要一场比赛时,使用数组似乎很尴尬和不合适。如果我制作 @regular 标量,则该函数将返回匹配的数量。
我试图寻找答案,但结果与在 Bash 中使用 Perl grep 的所有问题混为一谈。
最佳答案
您可以通过分配给列表上下文中的标量来捕获单个匹配项
($regular) = map(/^regular\.roll (.*)$/, @lines);
左侧的括号很重要,否则您将在右侧大小上施加标量上下文,结果将是其他内容,例如元素的数量。
如果您试图从
grep
捕获第一个匹配项(但不是 map
)并且您更喜欢使用 Perl 模块,first
List::Util
中的函数package 返回第一个匹配,并且比调用 grep
更有效并丢弃所有额外的匹配项。use List::Util 'first';
...
$regular = first { /pattern/ } @input;
关于perl - 当我只期待一个匹配时,我可以将 grep(或 map)限制为第一个匹配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779957/