Concat regex,在常量声明中使用字符串作为一行
我试图将常数声明为一行,如下所示:Concat regex,在常量声明中使用字符串作为一行,regex,string,perl,Regex,String,Perl,我试图将常数声明为一行,如下所示: 使用常量HOME\u SCRIPT=>“/HOME/george/”$0=~/(.*)\.pl/ 问题是它返回:/home/george/1。也就是说,它包含正则表达式的匹配数。 我试过: 使用常量HOME\u SCRIPT=>(“/HOME/george/”)$0=~/(.*)\.pl/ 使用常量HOME\u SCRIPT=>“/HOME/george/”。($0=~/(.*)\.pl/) 但结果是一样的。 是否可以为此创建一个oneliner use co
使用常量HOME\u SCRIPT=>“/HOME/george/”$0=~/(.*)\.pl/代码>
问题是它返回:/home/george/1
。也就是说,它包含正则表达式的匹配数。
我试过:
使用常量HOME\u SCRIPT=>(“/HOME/george/”)$0=~/(.*)\.pl/代码>
使用常量HOME\u SCRIPT=>“/HOME/george/”。($0=~/(.*)\.pl/)代码>
但结果是一样的。
是否可以为此创建一个oneliner
use constant HOME_SCRIPT => "/home/george/". ($0 =~ /(.*)\.pl/)[0];
或
如果运行的是Perl5版本14或更高版本,则可以通过/r
修饰符使用非破坏性替换。像这样
use constant HOME_SCRIPT => ("/home/george/$0") =~ s/\.pl\z//r;
或者,如果您被迫更早地使用某些方法,或者只是希望使用不同的方法,您可以编写
use constant HOME_SCRIPT => '/home/george/' . ($0 =~ /(.*)\./, $1);
@Cratylus它接受列表的第一个元素,(list)[0]
,因此regex保留在列表上下文中,而不是强制使用标量上下文的
操作符
use constant HOME_SCRIPT => '/home/george/' . ($0 =~ /(.*)\./, $1);