关于屏幕输入参数调用子程序求最大值的问题

关于屏幕输入参数调用子程序求最大值的问题

程序内容如下:
chomp (@max_num=<STDIN>);
print "\@max is: @max_num\n";
$maxnum=&max(@max_num);

sub max{
my ($bigger)=shift@_;
foreach(@_){
if ($_ > $bigger) {
  $bigger=$_;
  print "max_nums is : $bigger\n";
  $bigger=$bigger;
}
}
  $bigger;
}
print "the maxnum is : $maxnum\n";

我通过屏幕输入参数内容,然后调用程序中的Max子程序,得不到我想要的结果啊怎么 ?就是求参数中的最大数。
但是如果不通过屏幕输入参数的话就能得到。 下面的例子就能得到最大值:
$maxnum=&max(2,3,8,132,29,45,99,100);
print "the maxnum is : $maxnum\n";
sub max{
my ($max_num)=shift@_;
foreach(@_){
if ($_ > $max_num) {
  $max_num=$_;
  #print "max_nums is : $max_nums\n";
  #$max_nums=max_nums;
}
}
  $max_num;
}
这是为什么呢? 我哪里写错了? 请高手指点一下,初学Perl,有些地方不是很清楚~~
  1 #!/usr/bin/perl -w

  2 #

  3 # Author: Scott.zhou

  4 # Date: Tue Dec 11 10:39:18 2007

  5 #

  6 use strict;
  7 my @max_num;
  8 chomp (@max_num = <STDIN>);
  9
 10 sub max() {
 11     my $bigest = shift @_;
 12     foreach(@_) {
 13         if ($_ > $bigest) {
 14             $bigest = $_;
 15         }
 16     }
 17     $bigest;
 18 }
 19
 20 my $maxnum = &max(@max_num);
 21 print "The maximum number is: $maxnum\n";


[scott@FreeBSD ~/perl]$ perl maxnum.pl
6
8
2
4
0
^D
The maximum number is: 8
[scott@FreeBSD ~/perl]$

也许是你输入的方式有问题吧
改一下就行了

      chomp ($num=<STDIN>);
      print "\$num is: $num\n";
my @max_num=split(/ +/,$num);
my $maxnum=&max(@max_num);

sub max{
my ($bigger)=shift@_;
     foreach(@_){
          if ($_ > $bigger) {
               $bigger=$_;
          }
     }
  $bigger;
}
print "the maxnum is : $maxnum\n";
是我的输入方式的问题,我是在一行中输入的,中间是以空格或者逗号进行分割的~~  
看到你的回复,恍然大悟,屏幕上的标准输出是要以回车换行进行界定的~~
非常感谢你的提示,还有你后面的方法~~
D:\perl\sunlei>bigger.pl
1
2
3
4
5
^Z
@max is: 1 2 3 4 5
max_nums is : 2
max_nums is : 3
max_nums is : 4
max_nums is : 5
the maxnum is : 5
已经得到最大值5了。


QUOTE:
原帖由 sunlei6789 于 2007-12-11 23:07 发表
是我的输入方式的问题,我是在一行中输入的,中间是以空格或者逗号进行分割的~~  
看到你的回复,恍然大悟,屏幕上的标准输出是要以回车换行进行界定的~~
非常感谢你的提示,还有你后面的方法~~
D:\perl\sun ...

  1 #!/usr/bin/perl -w

  2 #

  3 # Author: Scott.zhou

  4 # Date: Tue Dec 11 10:39:18 2007

  5 #

  6 use strict;
  7 my @max_num;
  8 chomp(my $line = <>);
  9 @max_num = split /[ ,]/, $line;
 10
 11 sub max() {
 12     my $bigest = shift @_;
 13     foreach(@_) {
 14         if ($_ > $bigest) {
 15             $bigest = $_;
 16         }
 17     }
 18     $bigest;
 19 }
 20
 21 my $maxnum = &max(@max_num);
 22 print "The maximum number is: $maxnum\n";

稍微修改一下就可以实现你的输入方式了。