Perl编程实践:文件操作与用户交互

71、编写一个程序,给所有指定文件的 shebang 行后添加版权声明,同时创建备份文件

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

首先,为避免重复添加版权声明,对文件进行两次遍历。第一次遍历,使用哈希创建一个集合,键为文件名,值设为 1。代码如下:

my %do_these;
foreach (@ARGV) {
    $do_these{$_} = 1;
}

接着,检查文件,若文件已包含版权声明,则从待处理列表中移除该文件。代码如下:

while (<>) {
    if (/^## Copyright/) {
        delete $do_these{$ARGV};
    }
}

最后,重新确定缩减后的文件名列表,创建备份文件,并在 shebang 行后添加版权声明。代码如下:

@ARGV = sort keys %do_these;
$^I = ".bak";
while (<>) {
    if (/^#!/) {
        $_ .= "## Copyright (c) 20XX by Yours Truly\n";
    }
    print;
}

72、编写一个程序,生成一个 1 到 100 之间的随机数作为秘密数字,让用户不断猜测这个数字,直到猜对或者用户输入 quit、exit 或空行退出程序。如果用户猜的数字小于秘密数字,提示“Too small. Try again!”;如果大于,提示“Too large. Try again!”;猜对则提示“That was it!”;用户退出则提示“Sorry you gave up. The number was [秘密数字].”。

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

use strict;
use warnings;
# 生成 1 到 100 之间的随机数
my $secret = int(1 + rand 100);
while (1) {
    print "Enter your guess (or 'quit', 'exit', or press Enter to quit): ";
    my $guess = <STDIN>;
    chomp $guess;
    # 检查用户是否要退出
    if ($guess eq 'quit' || $guess eq 'exit' || $guess eq '') {
        print "Sorry you gave up. The number was $secret.\n";
        last;
    }
    # 检查输入是否为有效数字
    if ($guess =~ /^\d+$/) {
        if ($guess < $secret) {
            print "Too small. Try again!\n";
        } elsif ($guess > $secret) {
            print "Too large. Try again!\n";
        } else {
            print "That was it!\n";
            last;
        }
    } else {
        print "Invalid input. Please enter a valid number or 'quit', 'exit'.\n";
    }
}

这个程序首先生成一个 1 到 100 之间的随机数作为秘密数字。然后进入一个无限循环,提示用户输入猜测的数字。如果用户输入 quit exit 或空行,程序会输出退出提示并结束。如果用户输入的是有效数字,程序会根据猜测结果给出相应提示,猜对时退出循环。如果输入无效,会提示用户重新输入。

73、编写一个程序,使得在开发程序时,如果变量 $Debug 为真,则打印出秘密数字。$Debug 的值可以是环境变量 $ENV{DEBUG} 的值,若 $ENV{DEBUG} 未定义,则默认值为 1。

由于未给出上一个程序,这里给出实现该功能的通用示例代码:

use warnings;
use strict;
# 获取 $Debug 的值,若 $ENV{DEBUG} 未定义则默认值为 1
my $Debug = defined $ENV{DEBUG}? $ENV{DEBUG} : 1;
# 假设秘密数字为 42
my $secret_number = 42;
# 如果 $Debug 为真,则打印秘密数字
if ($Debug) { print "秘密数字是: $secret_number\n";}

上述代码首先检查环境变量 $ENV{DEBUG} 是否定义,若未定义则将 $Debug 设为 1。然后设定一个秘密数字,当 $Debug 为真时打印该秘密数字。

74、编写一个程序,设置一些环境变量,其中键 ZERO 和 EMPTY 有假但已定义的值,键 UNDEFINED 没有值。使用 // 运算符在打印环境变量时,仅当 $ENV{$key} 未定义时选择字符串 (undefined) 输出。不使用 Perl 5.10 特性时,使用三元运算符实现相同功能。

使用 // 运算符的代码如下:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值