+ -
当前位置:首页 → 问答吧 → 数据处理perl

数据处理perl

时间:2011-07-15

来源:互联网

代码:
#!/usr/bin/perl
sub max {
if ($_[0] > $_[1])
            {
              print $_[0];
            }
else {
            print $_[1];
        }
}

print "Pls enter two numbers:\n";
($val1,$val2) = <STDIN>;
#$val2 = <STDIN>;
&max($val1,$val2);


各位,为什么我用这个代码一次想输入两个变量,然后将他们传递给sub max有问题。程序一直卡在输入这里,一直提示输入。不会去调用sub了。我是新手,请指教。
原来程序是这样的,可以正确运行。我改成上面那样就不可以了,是哪个地方我弄错了么?
代码:
#!/usr/bin/perl
sub max {
if ($_[0] > $_[1])
            {
              print $_[0];
            }
else {
            print $_[1];
        }
}

print "Pls enter two numbers:\n";
$val1 = <STDIN>;
$val2 = <STDIN>;
&max($val1,$val2);

作者: joseneo   发布时间: 2011-07-15

额,我知道为什么一直会提示输入了,一定要输入两个数字后,用Ctrl+D才能调用sub max。这个是为什么啊?列表中我只定义了两个变量啊。输入两次不是应该结束掉?

作者: joseneo   发布时间: 2011-07-15

你这样输入,要ctrl-D的。2参数空格分开,ctrl-D表示输入结束。
perl的变量,可以输入无数行的啊。

作者: eexpress   发布时间: 2011-07-15

ee...........你没回答到重点啊。。。。
你第一个方法是在列表上下文中得,所以,先会读取所有行,然后,赋值的时候,只用到了前两行。
第二个是在scalar上下文中,所以只需要一行,自然不用C-D了
分开写吧

作者: ChenFengyuan   发布时间: 2011-07-15

ChenFengyuan 写道:
ee...........你没回答到重点啊。。。。
你第一个方法是在列表上下文中得,所以,先会读取所有行,然后,赋值的时候,只用到了前两行。
第二个是在scalar上下文中,所以只需要一行,自然不用C-D了
分开写吧

好的,我知道了,以后都分开写。看来是没办法偷懒了,除非用foreach

作者: joseneo   发布时间: 2011-07-15