Perl编程实战:文件操作与算法实现

25、编写一个程序,其功能类似于 rm 命令,删除命令行中指定的所有文件。(你无需处理 rm 的任何选项)

可以使用Perl语言编写如下程序来实现该功能:

#!/usr/bin/perl

# 获取命令行参数中的文件名列表
my @files = @ARGV;

# 使用unlink操作符删除文件
unlink @files;

将上述代码保存为一个 .pl 文件,例如 rm_like.pl ,然后在命令行中运行该程序并指定要删除的文件,如 perl rm_like.pl file1.txt file2.txt ,即可删除指定的文件。

26、编写一个程序,其功能类似于 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";

27、如果你的操作系统支持,编写一个程序来查找当前目录中的任何符号链接,并打印出它们的值(就像使用 ls -l 命令那样:名称 -> 值)。

foreach ( glob( '.* *' ) ) {
    my $dest = readlink $_;
    print "$_ -> $dest\n" if defined $dest;
}

28、编写一个程序,读取一个数字列表并对其进行数值排序,然后将排序后的列表以右对齐的列形式输出。用以下示例数据进行测试:17 1000 04 1.50 3.14159 –10 1.5 4 2001 90210 666

以下是一个满足需求的 Perl 程序示例:

use strict;
use warnings;
# 读取输入的数字
my @numbers;
while (<>) {
    push @numbers, split;
}
# 定义数值排序子程序
sub by_number {
    $a <=> $b
}
# 对数字进行排序
my @sorted_numbers = sort by_number @numbers;
# 输出排序后的数字,右对齐
foreach my $number (@sorted_numbers) {
    printf "%20g\n", $number;
}

将上述示例数据输入该程序,即可得到排序后右对齐输出的结果。

29、编写一个程序,将以下哈希表的数据按姓氏进行不区分大小写的字母顺序排序。当姓氏相同时,再按名字(同样不区分大小写)排序。输出的第一个名字应该是 Fred 的,最后一个应该是 Betty 的。所有姓氏相同的人应该分组在一起。不要修改数据。名字的大小写应与下面所示保持一致。哈希表数据为:my %last_name = qw{ fred flintstone Wilma Flintstone Barney Rubble betty rubble Bamm - Bamm Rubble PEBBLES FLINTSTONE };

以下是实现该功能的 Perl 代码:

my %last_name = qw{ fred flintstone Wilma Flintstone Barney Rubble betty rubble Bamm - Bamm Rubble PEBBLES FLINTSTONE };
my @sorted_names = sort { lc($last_name{$a}) cmp lc($last_name{$b}) or lc($a) cmp lc($b) } keys %last_name;
foreach my $name (@sorted_names) {
    print "$name $last_name{$name}\n";
}

30、编写一个程序,在给定的字符串中查找给定子字符串的所有出现位置,并打印出子字符串所在的位置。例如,给定输入字符串“This is a test.”和子字符串“is”,程序应报告位置2和5。如果子字符串是“a”,则应报告8。如果子字符串是“t”,程序会报告哪些位置?

程序会报告位置0、10和13。

31、使用 given 和智能匹配,编写一个程序,报告你在命令行指定的数字的所有因数(除了1和该数字本身)。例如,对于数字99,你的程序应报告它能被3、9、11和33整除。如果该数字是质数(没有因数),则报告该数字是质数。如果命令行参数不是数字,报告错误且不尝试计算因数。尽管你可以使用 if 结构和普通匹配来完成此任务,但只能使用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值