我真的是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);
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是当我只期望一个匹配并且只想要一个匹配时,使用数组似乎很尴尬和不合适。如果我使用@regular标量,则该函数将返回匹配数目。
我试图搜索答案,但是在Bash中使用Perl grep的所有问题都使结果感到困惑。
您可以通过在列表上下文中分配给标量来捕获单个匹配项
($regular) = map(/^regular\.roll (.*)$/, @lines);
Run Code Online (Sandbox Code Playgroud)
左侧的括号很重要,否则,您将在右手边的大小上施加标量上下文,结果将是其他内容,例如元素数。
如果您尝试从中捕获第一个匹配项grep(而不是map),而您更习惯使用Perl模块,则first该List::Util包中的函数将返回第一个匹配项,并且比调用grep和丢弃所有额外的匹配项更有效。
use List::Util 'first';
...
$regular = first { /pattern/ } @input;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |