Perl编程技巧与文件操作实践

74、对前一个程序进行修改,当变量 $Debug 为真时打印出秘密数字,$Debug 的值可以是环境变量 $ENV{DEBUG} 的值,若 $ENV{DEBUG} 未定义则默认为 1,分别用 v5.10 及之前的特性实现。

使用 v5.10 特性实现:

use v5.10;
my $Debug = $ENV{DEBUG} // 1;
my $secret = int(1 + rand 100);
print "Don't tell anyone, but the secret number is $secret.\n" if $Debug;

使用 v5.10 之前特性实现:

my $Debug = defined $ENV{DEBUG} ? $ENV{DEBUG} : 1;
my $secret = int(1 + rand 100);
print "Don't tell anyone, but the secret number is $secret.\n" if $Debug;

75、编写一个程序,设置一些环境变量,其中键 ZERO 和 EMPTY 有假但已定义的值,键 UNDEFINED 无值。使用 // 运算符在 printf 参数列表中仅当 $ENV{$key} 未定义时选择字符串 (undefined) 进行输出,再用 Perl 5.10 之前的方法实现同样功能。

使用 Perl 5.10 实现的代码如下:

use v5.10;
$ENV{ZERO} = 0;
$ENV{EMPTY} = '';
$ENV{UNDEFINED} = undef;
my $longest = 0;
foreach my $key ( keys %ENV ) {
    my $key_length = length( $key );
    $longest = $key_length if $key_length > $longest;
}
foreach my $key ( sort keys %ENV ) {
    printf "%-${longest}s %s\n", $key, $ENV{$key} // "(undefined)";
}

使用 Perl 5.10 之前的方法实现同样功能的代码如下:

$ENV{ZERO} = 0;
$ENV{EMPTY} = '';
$ENV{UNDEFINED} = undef;
my $longest = 0;
foreach my $key ( keys %ENV ) {
    my $key_length = length( $key );
    $longest = $key_length if $key_length > $longest;
}
foreach my $key ( sort keys %ENV ) {
    printf "%-${longest}s %s\n", $key, defined $ENV{$key} ? $ENV{$key} : "(undefined)";
}

76、编写程序,找出命令行传入文件中最旧的文件,并打印其文件名和年龄(以天为单位,保留一位小数)

以下是实现该功能的程序:

die "No file names supplied!" unless @ARGV;
my $oldest_name = shift @ARGV;
my $oldest_age = -M $oldest_name;
foreach (@ARGV) {
    my $age = -M;
    ($oldest_name, $oldest_age) = ($_, $age) if $age > $oldest_age;
}
printf "The oldest file was %s, and it was %.1f days old.\n", $oldest_name, $oldest_age;

该程序首先检查命令行是否传入文件名,若未传入则报错退出。接着将第一个文件设为当前最旧文件,记录其年龄。然后遍历其余文件,若某文件的年龄大于当前最旧文件的年龄,则更新最旧文件的信息。最后使用 printf 打印最旧文件的文件名和年龄,年龄保留一位小数。

77、编写程序,在命令行传入的文件中找出自己拥有的、可读且可写的文件并打印,要求使用堆叠文件测试运算符(使用Perl 5.10或更高版本)

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

use v5.10;
foreach my $file (@ARGV) {
    if (-O -r -w $file) {
        say $file;
    }
}

此程序使用了堆叠文件测试运算符 -O (检查文件是否为当前用户所拥有)、 -r (检查文件是否可读)和 -w (检查文件是否可写)。它会遍历命令行传入的所有文件,找出满足条件的文件并打印其名称。

运行该程序时,需在命令行传入文件列表,例如:

perl script.pl file1.txt file2.txt

78、编写程序,提示用户输入一个目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值