新学perl请帮忙解释一下一段代码!!(结帖)

新学perl请帮忙解释一下一段代码!!(结帖)

[root@cache251-217 perl]# more Employee
#!/usr/bin/perl -w

use strict;

my @employees=(
        'Smith,Bob,123101,9.35,40',
        'Franklin,Alice,132912,10,15,35',
        'Wojohowicz,Ted,198131,6.50,39',
        'Ng,Wendy,141512,9,50,40',
        'Cliburn,Stan,131211,11,25,40',
);

sub print_emp{
        my($last,$first,$emp,$hourly,$time)=split(',',$_[0]);
        my $fullname;
        $fullname=sprintf("%s %s",$first,$last);
        printf("%6d %-20s %6.2f %3d %7.2f\n",
                $emp,$fullname,$hourly,$time,
                ($hourly*$time)+.005 );
}
===============================
@employees=sort{
                my($L1,$F1)=split(',',$a);
                my($L2,$F2)=split(',',$b);
                #print $L1,$L2,$F1,$F2;
                return( $L1 cmp $L2
                            ||
                        $F1 cmp $F2
                );
                } @employees;
=================================这段不太理解
foreach(@employees) {
        print_emp($_);
}

$a $b 没定义就这么直接用了?return做了比较返回什么?一行吗?

查一下sort的用法
这个版精华里应该有
$a $b是sort默认进行比较的两个变量
所以不用定义
cmp返回的结果是0,-1,1之中的一个
这个sort其实就是先按名字的第一个单词排序,如果相同则对第二个单词排序
learning perl里面说的很清楚的
当然你也可以写的更加简单
@employees = sort { (split /,/,$a)[0] cmp (split /,/,$b)[0] or
                    (split /,/,$a)[1] cmp (split /,/,$b)[1]}@employees;


QUOTE:
原帖由 churchmice 于 2008-1-23 19:25 发表
$a $b是sort默认进行比较的两个变量
所以不用定义
cmp返回的结果是0,-1,1之中的一个
这个sort其实就是先按名字的第一个单词排序,如果相同则对第二个单词排序
learning perl里面说的很清楚的
当然你也可以写 ...

恩,多谢,这段意思我能理解。
现在就是疑问在这里:
my($L1,$F1)=split(',',$a);
my($L2,$F2)=split(',',$b);

split(',',$a); 是拆分$a吧,但是这个命令以前并没有对$a赋过值啊!


QUOTE:
原帖由 linuxnextyear 于 2008-1-24 09:49 发表


恩,多谢,这段意思我能理解。
现在就是疑问在这里:
my($L1,$F1)=split(',',$a);
my($L2,$F2)=split(',',$b);

split(',',$a); 是拆分$a吧,但是这个命令以前并没有对$a赋过值啊!


他们不是说让你去精华里面看sort了
$a指的就是前一个变量,比如$array[0]
$b后一个,比如$array[1]
这么理解就行了
不需要显式赋值


QUOTE:
原帖由 linuxnextyear 于 2008-1-24 09:49 发表


恩,多谢,这段意思我能理解。
现在就是疑问在这里:
my($L1,$F1)=split(',',$a);
my($L2,$F2)=split(',',$b);

split(',',$a); 是拆分$a吧,但是这个命令以前并没有对$a赋过值啊!

$a $b就是subroutine传进来的参数
不需要显示赋值的