@How 在 Perl 中拆分时将字符串转换为整数

@How to convert strings to integers on a split in Perl

我一次读取一个数据文件中的行,将它们拆分为 : 并尝试将数组中的两个特定值存储到散列中。

foreach $a (<INPUT>)
{   

    @list = split (':', $a);

    $UIDH{$list[2]} = $list[5];

然后我尝试比较存储在散列中的值。

if (($list[2]) < 500 && > 0);
        {
            print "System type account\n";
        }

这就是我正在使用的。我的结论是散列中的值是一个字符串,因此比较不起作用。下面是我在程序中出现的代码。

open (INPUT, "<info.old") || die "Cannot open file : $!";
open (OUTPUT, ">out.txt") || die "Cannot open file : $!";

%UIDH;

foreach $a (<INPUT>)
{   

    @list = split (':', $a);

    $UIDH{$list[2]} = $list[6];

    if (($list[2]) >= 500)
        {
            print STDOUT "R\n";
        }
    if (($list[2]) < 500 && > 0);
        {
            print STDOUT "S\n";
        }
    if (($list[2]) == 0)
        {
            print STDOUT "SU\n";
        }

}

最后,这是我正在处理的数据示例

apache:x:48:48:Apache:/var/www:/sbin/nologin
msmith:x:501:501::/home/msmith:/bin/bash
Sjones:x:502:502::/home/sjones:/bin/bash
sdonle:x:503:503::/home/sdavis:/bin/sh
scrosby:x:504:504::/home/scrosby:/bin/bash
borr:x:0:0::/home/borr:/bin/sh

我不知道为什么你声称比较不起作用,因为你的代码甚至没有编译,所以你从来没有评估过它。

if (($list[2]) < 500 && > 0); { ... }

应该是

if (($list[2]) < 500 && $list[2] > 0) { ... }

两个错误:

  • >是二元运算符;需要用在两个表达式之间进行比较。

  • if 语句的格式是 if (EXPR) BLOCK,但你有 if (EXPR); BLOCK.

修复这些错误后,您的代码将输出以下内容:

S
R
R
R
R
SU

这似乎是预期的结果,但您没有说明您的预期。

注意:如果您的代码 reviewed.

会让您受益匪浅

为了使您的代码更具可读性和更易于维护,您应该为变量使用有意义的名称。

@list = split (':', $a);
my $account_number = $list[2];
my $account_uidh   = $list[5];