Perl编程实践:文件操作与系统任务

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 数组中。若数组为空,说明该数字是质数;否则,输出该数字的所有因数。

32、编写一个 Perl 程序,要求用户输入一个数字,程序需要报告该数字是奇数还是偶数,是否为质数(除了 1 和该数字本身没有其他除数),以及是否能被你喜欢的数字(假设为 42)整除。仅使用智能匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值