perl – 将替换应用于grep返回的第一个项目

perl – 将替换应用于grep返回的第一个项目,第1张

概述我有这个程序 sub f { 我有这个程序

sub f {                                                                                                                                                                                                                           return ("A/X","B/X");                                                                                                   }                                                                                                                            $x = grep( /X$/,f() ) =~ s/\/X$//r;                                                                                           print "$x\n";                                                                                                                ($x) = grep( /X$/,f() ) =~ s/\/X$//r;                                                                                         print "$x\n";                                                                                                                ( ($x) = grep( /X$/,f() ) ) =~ s/\/X$//;                                                                                        print "$x\n";                                                                                                                ($x) = grep( /X$/,f() );                                                                                                      $x =~ s/\/X//;                                                                                                               print "$x\n";

结果是

22A/XA

我想要的结果是

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();
总结

以上是内存溢出为你收集整理的perl – 将替换应用于grep返回的第一个项目全部内容,希望文章能够帮你解决perl – 将替换应用于grep返回的第一个项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1247935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存