- 论坛徽章:
- 0
|
1. 请正确的精简如下代码。
sub myfunc {
# $x = ...;
if ( $x ) {
return 1;
} else {
return;
}
}
#################################################################
sub myfunc {
return unless $x;
1;
}
################################################################
2. $x=()结果是什么?列表位于标量上下文是什么情况?()是不是用来创建空的list?请解释原因。
#################################################################
$x=()这个语句导致$x的结果时undef,列表位于标量上下文时,返回的结果时一个标量值,即列表的长度,()是来创建一个空的列表
###############################################################
3. 1,2,3,5,6,7,8 如何合并成1-3,5-8?
##################################################################
1..3,5..8
#################################################################
4.@x=(5,7,9); $x[1]与@x[1]的区别是什么?
################################################################
$x[1]是一个数组@x的其中下标为1的标量值,其标量值是7,@x[1]是一个数组,这个数组里只有一个标量值7
####################################################################
5. 用最短和优的perl代码对当前目录下的文件和子目录按修改时间进行排序。
############################################################
#!/usr/bin/perl
print sort { -M $a <=> -M $b } glob "~/*";
##########################################################
6.传入一串数字并返回所有大于平均值的数字。
############################################################
#!/usr/bin/perl
my @list;
while(my $str = <STDIN> {
chomp $str;
last unless $str;
push @list, $str;
}
my $count = @list;
my $sum;
foreach (@list) {
$sum += $_;
}
my $average = $sum / $count;
print grep { $_ > $average } @list;
###########################################################
7.让用户不断猜测范围从1到100的秘密数字,直到猜中为止。程序应该以魔术公式lnt(1+rand 100)来随机产生秘密数字。当用户猜错时,程序应相应“too high”或者“too low”。如果用户quit或者exit或者键入一个空白行程序就中止。当然如果用户猜到了,程序也应该中止。
###################################################################
#!/usr/bin/perl
my $secretnum = int ( 1 + rand (100));
while (my $in = <STDIN>{
chomp $in;
exit 0 if($in =~ /^(quit|exit|\h+)$/);
if($in > $secretnum){
print "too high\n";
} elsif ($in < $secretnum){
print "too low\n";
} else {
exit 0;
}
}
###################################################################
8. 写一个简单的TCP Echo Server,在linux/unix环境运行,侦听在特定端口,接受用户的网络输入,并返回同样的数据给对方,能接受quit命令。
基本要求:
(1)无阻塞IO。
(2)daemon方式运行。
(3)能接受kill -HUP重启信号。
##############################################################################
TCP Echo Server端的代码如下:
#!/usr/bin/perl
#将这段代码保存为server.pl文件,使用的时候输入perl server.pl &
use IO::Socket;
use IO::Select;
use POSIX;
$main_sock = new IO::Socket::INET ( LocalAddr => 'localhost',
LocalPort => 9000,
Proto => 'tcp',
Listen => 5,
Reuse => 1,
);
die "TCP Echo Server could not be created! !" unless $main_sock;
$handles = new IO::Select();
$handles->add($main_sock);
while(1){
($new_readalbe) = IO::Select->select($handles,undef,undef,undef);
foreach $sock(@$new_readalbe){
if($sock == $main_sock){
$new_sock = $sock->accept();
fcntl($new_sock, F_SETFL(), O_NONBLOCK());
$handles->add($new_sock);
} else {
$buf = <$sock>;
if($buf){
chomp $buf;
if($buf =~ /^quit$/){
$handles->remove($sock);
close $sock;
next;
}
print $sock "$buf\n";
} else {
$handles->remove($sock);
close $sock;
}
}
}
}
作为测试,同时提供了TCP客户端,代码如下:
#!/usr/bin/perl
#将这段代码保存为client.pl文件,在终端输入命令:perl client.pl即可
use POSIX;
use IO::Socket;
use IO::Select;
$sock = new IO::Socket::INET ( PeerAddr => '127.0.0.1',
PeerPort => 9000,
Proto => 'tcp',
);
die "TCP Client could not connect to SERVER!!" unless $sock;
while(my $input = <STDIN>{
chomp $input;
unless ($input) {
close $sock;
exit 0;
}
print "发送出去了\n";
print $sock "$input\n";
if($input =~ /^quit$/){
close $sock;
exit 0;
}
my $show = <$sock>;
print "$show";
}
############################################################################## |
|