$ cat names
projectname_flag_jantemp
projectname_flag_febtemp
projectname_flag_marchtemp
projectname_flag_mondaytemp
$
Run Code Online (Sandbox Code Playgroud)
Perl代码:
my $infile = "names";
open my $fpi, '<', $infile or die "$!";
while (<$fpi>) {
my $temp = # what should come here? #
func($temp);
}
Run Code Online (Sandbox Code Playgroud)
我想要临时拥有
jan
feb
march
monday
Run Code Online (Sandbox Code Playgroud)
分别.
模式始终保持不变
projectname_flag_<>temp
Run Code Online (Sandbox Code Playgroud)
我该怎么做提取?
my ($temp) = /^projectname_flag_(.+)temp$/;
Run Code Online (Sandbox Code Playgroud)
请注意,$temp需要括号,以便模式匹配在列表上下文中运行.如果没有它们,$temp最终将只包含一个表示匹配是否成功的true或false值.
更一般地,列表上下文中的模式匹配返回捕获的子模式(如果匹配失败,则返回空列表).例如:
my $str = 'foo 123 456 bar';
my ($i, $j) = $str =~ /(\d+) +(\d+)/; # $i==123 $j==456
Run Code Online (Sandbox Code Playgroud)
如果perl需要与旧版本的兼容性,我会使用FM的答案(只需通过检查是否$month已定义来确保匹配成功).
从5.10开始,您可以使用命名捕获:
my $month;
if ( /^ projectname _flag_ (?<month> [a-z]+ ) temp \z/x ) {
$month = $+{month};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |