Perl在执行unix命令时表现得很奇怪

时间:2014-03-12 22:19:23

标签: perl unix

执行attatched代码时,输​​入f将返回:

Arthur Putie:923-835-8745:923-812-6789:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Barbara Kertz:385-573-8326:385-555-8321:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
Betty Boop:245-836-8357:245-876-7656:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Ephram Hardy:293-259-5395:293-222-3334:235 CarltonLane, Joliet, IL 73858:8/12/20:56700

输入l时返回与输入f相同的内容,根据名字排序。

        print "Please choose either first or last name (f/l): ";
        $type = <>;
        chomp($type);
        if ( $type == "f" ) {
            system("sort list.txt");
        } elsif ( $type == "l" ) {
            system("sort -k2 list.txt");
        } else {
            print "Choice not recognized.\n";
        }

但是,如果我在UNIX中手动执行命令,则命令按原样排序,([sort list.txt]是第一个名称alphabatized,[sort -k2 list.txt]是姓氏aplphabetized)

为什么会发生这种情况的任何想法,或解决方法的解决方法?我是perl的新手,所以我宁愿坚持使用UNIX命令替代方案,而不是纯粹的perl脚本解决方案。

1 个答案:

答案 0 :(得分:5)

使用 eq 而不是 == ,您正在使用数字比较,您应该进行字符串比较。

这是一个经典的错误,我经常在匆忙中这样做而不考虑标量和我想要的东西。我在shell中进行了测试,现在可以正常工作了。