Perl带有外壳的正则表达式

问题描述 投票:1回答:2
my $dirs = qx(echo \$PATH);
my @arr = $dirs ~= //(.*):;

我知道正则表达式必须先找到一个“ /”,然后是一个“:”。我以为我的正则表达式会做到这一点,但是我不断发现搜索模式没有终止。任何帮助将不胜感激。

regex perl directory
2个回答
6
投票

无需调用Shell,因为Perl在其%ENV哈希中提供了所有环境变量。使用split从环境变量中提取冒号分隔的目录名称:

my @dirs = split /:/, $ENV{PATH};

0
投票

我不断发现搜索模式没有终止

您的代码dirs ~= //(.*):确实很奇怪:您以/开始一个正则表达式,然后立即将其关闭://

您可以使用m##轻松知道它的开始和结束位置,如下所示:

my $dirs = qx(echo \$PATH);
my @arr = $dirs =~ m#([^:]+)(?::|$)#g;

(顺便说一下,@ toolic的答案非常好。)

© www.soinside.com 2019 - 2024. All rights reserved.