You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Perl的print_dir子程序调用print_file打印目录内文件内容

问题根因

你编写的print_dir子程序存在逻辑错误,是代码无输出也无报错的核心原因:

  • 你通过第一行my $dir = shift;已经取出了传入的第一个目录参数,生成了该目录下的文件列表@files
  • 后续新增的while (my $dir = shift)循环是多余逻辑:如果只传入1个目录参数,第二次执行shift会返回空值,循环直接不运行,自然不会调用print_file输出任何内容;如果传入多个目录参数,循环内也完全没有用到新取出的$dir变量,永远只会处理第一个目录的文件。

修复后的代码

直接删除多余的while循环即可,单目录处理版本:

#!/usr/bin/perl
use strict;
use warnings;

sub print_file {
    my $file = shift;
    open(my $FILE, $file)
        or die $!;
    while (my $line = <$FILE>) {
        print $line;
    }
}

sub print_dir {
    my $dir = shift;
    my @files = glob "$dir/*";
    foreach my $file (@files) {
        # 可选优化:判断是普通文件再处理,避免打开子目录报错
        next unless -f $file;
        print_file $file;
    }
}

print_dir @ARGV;

如果需要支持传入多个目录批量处理,可以调整print_dir逻辑如下:

sub print_dir {
    # 遍历所有传入的目录参数
    foreach my $dir (@_) {
        my @files = glob "$dir/*";
        foreach my $file (@files) {
            next unless -f $file;
            print_file $file;
        }
    }
}

内容的提问来源于stack exchange,提问作者Alexandra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:06:10