我可以使用正则表达式在perl中输入if语句吗?

时间:2014-10-16 05:49:32

标签: regex perl

正在进行的是我正在解析/ etc / passwd文件以提取文件中每个人的用户名和名/姓。我可以使用正则表达式来获取我的if语句吗?以下是我想要匹配的一行示例:

$parameter = cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash

if ($parameter =~ /(.+):(.+):(.+):(.+):(.+),(.+),(.+),(.+):(.+):(.+)/){
    my $uid =$1;
    my $fname = $5 =~ /^\W+/;
    my $lname = $5 =~ /\W+$/;
    push (@results, $uid, $fname, $lname);
}

perl是否在if语句中返回一个真正的布尔值并允许其余的执行?如果没有,我该如何实现呢?

3 个答案:

答案 0 :(得分:1)

是的,在布尔上下文中,匹配运算符是一个布尔运算符。

但请接受@squiguy的建议,使用split。

CPAN上甚至还有一个passwd模块。

http://search.cpan.org/dist/Unix-ConfigFile/PasswdFile.pm

答案 1 :(得分:0)

所以这是比较好的选择....

$parameter = cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash

my ($uid, $junk, $junk2, $junk3, $name, $junk4, $junk5) = split /:/, $parameter;

my $fname = $name =~ /^\w+/;
my $lname = $name =~ /\w+$/;

push (@results, $uid, $fname, $lname);

答案 2 :(得分:0)

请尝试以下代码:

my $var = "cvwalters:*:14608:140608:Chris V. Walters,N/A,N/A,N/A:/home/cvwalters:/bin/bash";
my @arr = split /[:,]/, $var;
my $uid = $arr[0];
my ($fname) = $arr[4] =~ /^(\w+)/;
my ($lname) = $arr[4] =~ /(\w+)$/;
push(@results,$uid,$fname,$lname);