perl – 将替换应用于grep返回的第一个项目
发布时间:2020-12-16 06:21:32 所属栏目:大数据 来源:网络整理
导读:我有这个程序 sub f { return ("A/X","B/X"); } $x = grep( /X$/,f() ) =~ s//X$//r; print "$xn"; ($x) = grep( /X$/,f() ) =~ s//X$//r; print "$xn"; ( ($x) = grep( /X$/,f() ) ) =~ s//X$//; print "$xn"; ($x) = grep( /X$/,f() ); $x =~ s//X/
我有这个程序
sub f { return ("A/X","B/X"); } $x = grep( /X$/,f() ) =~ s//X$//r; print "$xn"; ($x) = grep( /X$/,f() ) =~ s//X$//r; print "$xn"; ( ($x) = grep( /X$/,f() ) ) =~ s//X$//; print "$xn"; ($x) = grep( /X$/,f() ); $x =~ s//X//; print "$xn"; 结果是 2 2 A/X A 我想要的结果是 A 但只有最后一次尝试才能产生它. 在我的完整程序中,我想用一行来完成这个,因为我必须多次这样做.我想避免像$x [0]这样的事情,f()是一个更复杂的函数 我该怎么做? 解决方法my ($x) = map { s{/X$}{}r } grep { /X$/ } f(); 要么 my $x = ( grep { /X$/ } f() )[0] =~ s{/X$}{}r; 要么 use List::Util qw( first ); my $x = ( first { /X$/ } f() ) =~ s{/X$}{}r; 如果f()没有返回任何内容,第一个静默地将$x设置为undef,而另外两个将$x设置为空字符串,并在该情况下发出警告.第二个避免了不必要的工作.第三个避免更多. 顺便说一句,你要求相当于以下内容 my ($x) = map { s{/X$}{}r } grep { m{X$} } f(); 但我认为你想要以下内容: my ($x) = map { s{/X$}{}r } grep { m{/X$} } f(); 让我们避免重复,以避免再犯错误! my ($x) = map { my $s=$_; $s =~ s{/X$}{} ? $s : () } f(); 要么 use File::Basename qw( fileparse ); my ($x) = map { my ($fn,$dir_qn) = fileparse($_); $fn eq 'X' ? $dir_qn : () } f(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |