- 論壇徽章:
- 0
|
本帖最后由 dl0622 于 2011-03-10 09:12 編輯
以下代碼在AIX5.3試跑通過:
1. 請正確的精簡如下代碼。
sub myfunc {
# $x = ...;
if ( $x ) {
return 1;
} else {
return;
}
}
答:
sub myfunc {
$x==0?"":1;
}
2. $x=()結(jié)果是什么?列表位于標(biāo)量上下文是什么情況?()是不是用來創(chuàng)建空的list?請解釋原因。
答:$x=()結(jié)果是空;列表位于標(biāo)量上下文時返回最后一個元素;()是用來創(chuàng)建空的list。
原因:
在標(biāo)量環(huán)境里,列表中逗號操作符是一個兩目操作符,它會丟棄左邊的值并且返回右邊的值。逗號操作符的左邊實際上提供了一個空環(huán)境。
因為逗號操作符是左關(guān)聯(lián)的,如果你有一系列逗號分隔的數(shù)值,那你總是得到最后一個數(shù)值,
因為最后一個逗號會丟棄任何前面逗號生成的東西。
3. 1,2,3,5,6,7,8 如何合并成1-3,5-8?
答:- #!/usr/bin/perl
- use strict;
- my @a=(1,2,3,5,6,7,8);
- my @b;
- for(0..$#a){
- if(($_==0)||($_==$#a)){
- push @b,$a[$_];
- }
- elsif($a[$_]+1 != $a[$_+1]){
- push @b,(join ",",($a[$_],$a[$_+1]));
- }
- }
- my $result=join "-",@b;
- print $result."\n";
復(fù)制代碼 4.@x=(5,7,9); $x[1]與@x[1]的區(qū)別是什么?
答:$x[1]與@x[1]基本無區(qū)別;$[$a]與@[$a]則有可能存在區(qū)別,例如當(dāng)$a=0..2 時。
5. 用最短和優(yōu)的perl代碼對當(dāng)前目錄下的文件和子目錄按修改時間進(jìn)行排序。
答:- #!/usr/bin/perl
- use strict;
- opendir(THISDIR, ".") or die $!;
- my @allfiles = grep { $_ ne '.' and $_ ne '..' } readdir THISDIR;
- my %h;
- foreach(@allfiles){
- $h{(stat "./$_")[9]} = $_;
- }
- foreach(sort keys %h){
- print "$h{$_}\n";
- }
復(fù)制代碼 6.傳入一串?dāng)?shù)字并返回所有大于平均值的數(shù)字。
答:- #!/usr/bin/perl
- use strict;
- my @a=(1,2,3,5,6,7,8);
- my $b;
- for(0..$#a){
- $b+=$a[$_];
- }
- my $num=@a;
- my $avg=$b/$num;
- for(@a){
- if($_>$avg){
- print "$_\n";
- }
- }
復(fù)制代碼 7.讓用戶不斷猜測范圍從1到100的秘密數(shù)字,直到猜中為止。程序應(yīng)該以魔術(shù)公式int(1+rand 100)來隨機(jī)產(chǎn)生秘密數(shù)字。
當(dāng)用戶猜錯時,程序應(yīng)相應(yīng)“too high”或者“too low”。如果用戶quit或者exit或者鍵入一個空白行程序就中止。
當(dāng)然如果用戶猜到了,程序也應(yīng)該中止。
答:- #!/usr/bin/perl
- use strict;
- my $rand_num=int(1+rand 100);
- while(1){
- print"please enter a number which is between 1 and 100:\n";
- my $in=<STDIN>;
- if(($in=~/\bquit\b/)||($in=~/\bexit\b/)||($in=~/^\s+/)){
- exit;
- }
- elsif($in>100||$in<0){
- print"you enter a number which is not between 1 and 100,please check!\n";
- next;
- }
- elsif($in > $rand_num){
- print"too high\n";
- next;
- }
- elsif($in < $rand_num){
- print"too low\n";
- next;
- }
- elsif($in == $rand_num){
- print"bingo!\n";
- exit;
- }
- else{
- print"unknow error!\n";
- next;
- }
- }
復(fù)制代碼 8. 寫一個簡單的TCP Echo Server,在linux/unix環(huán)境運行,偵聽在特定端口,接受用戶的網(wǎng)絡(luò)輸入,并返回同樣的數(shù)據(jù)給對方,
能接受quit命令。
基本要求:
(1)無阻塞IO。
(2)daemon方式運行。
(3)能接受kill -HUP重啟信號。 |
|