26、编写一个程序,其功能类似于 rm 命令,删除命令行中指定的所有文件。(你无需处理 rm 命令的任何选项。)
可以使用以下Perl代码实现:
#!/usr/bin/perl
# 获取命令行参数中的文件名列表
my @files = @ARGV;
# 使用unlink函数删除文件
unlink @files;
将上述代码保存为一个 .pl 文件,例如 rm_like.pl ,然后在命令行中使用 perl rm_like.pl file1 file2 ... 来删除指定的文件。
27、编写一个程序,其功能类似于mv命令,将第一个命令行参数指定的文件重命名为第二个命令行参数指定的名称。(无需处理mv命令的任何选项或额外参数。)需要考虑目标可能是一个目录的情况;如果是目录,则在新目录中使用原文件的基本名称。
以下是实现该功能的Perl程序:
use File::Basename;
use File::Spec;
my($source, $dest) = @ARGV;
if (-d $dest) {
my $basename = basename $source;
$dest = File::Spec->catfile($dest, $basename);
}
rename $source, $dest or die "Can't rename '$source' to '$dest': $!\n";
28、如果你的操作系统支持,编写一个程序来查找当前目录中的所有符号链接,并打印出它们的值(就像使用 ls -l 命令那样:名称 -> 值)。
foreach ( glob( '.* *' ) ) {
my $dest = readlink $_;
print "$_ -> $dest\n" if defined $dest;
}
29、编写一个程序,在给定的字符串中查找给定子字符串的所有出现位置,并打印出这些位置。例如,对于输入字符串“This is a test.”和子字符串“is”,程序应报告位置2和5。如果子字符串是“a”,应报告位置8。如果子字符串是“t”,程序会报告哪些位置?
程序会报告位置0、10和13。
30、编写一个数字猜测程序,使用 given 语句。如何处理非数字输入?不需要使用智能匹配。
重写时用 `given` 语句判断输入。处理非数字输入可在 `given` 中用正则或内置函数判断输入是否为数字,若不是则给出错误提示。
31、使用 given 和智能匹配,编写一个程序,报告你在命令行中指定数字的所有因数(除了1和该数字本身)。例如,对于数字99,你的程序应报告它能被3、9、11和33整除。如果该数字是质数(没有因数),则报告该数字是质数。如果命令行参数不是数字,报告错误且不尝试计算因数。尽管你可以使用 if 结构和普通匹配来实现,但只能使用智能匹配。
以下是满足需求的Perl程序:
use 5.010;
say "Checking the number <$ARGV[0]>";
given( $ARGV[0] ) {
when( ! /\A\d+\Z/ ) {
say "Not a number!"
}
my @divisors = divisors( $_ );
my @empty;
when( @divisors ~~ @empty ) {
say "Number is prime"
}
default {
say "$_ is divisible by @divisors"
}
}
sub divisors {
my $number = shift;
my @divisors = ();
foreach my $divisor ( 2 .. $number/2 ) {
push @divisors, $divisor unless $number % $divisor;
}
return @divisors;
}
该程序首先检查命令行参数是否为数字。如果不是,输出错误信息。如果是数字,计算其因数并存储在 @divisors 数组中。若数组为空,说明该数字是质数;否则,输出该数字的所有因数。

最低0.47元/天 解锁文章
924

被折叠的 条评论
为什么被折叠?



