Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concat regex,在常量声明中使用字符串作为一行_Regex_String_Perl - Fatal编程技术网

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);