@如何在Perl中的分割上将字符串转换为整数

时间:2016-12-09 20:05:15

标签: perl perl-data-structures

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

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

2 个答案:

答案 0 :(得分:2)

我不知道为什么你声称比较不起作用,因为你的代码甚至没有编译,因为你的代码甚至无法编译。

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可以大大受益。

答案 1 :(得分:0)

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

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