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

Perl读取多行文本文件仅输出首行,如何实现全内容打印?

问题:Perl读取文件仅输出部分内容,如何打印全部行?

Hey there! Let's break down what's happening here and fix it up.

首先,你的原代码里用了 my $text = <$fh> —— 在Perl里,当你把文件句柄的读取操作放在标量上下文(也就是赋值给单个变量)时,它只会读取第一行内容。如果你的input.txt里"Hello my"后面刚好有个换行(比如你输入的时候不小心敲了回车),那自然只会输出这第一行的内容。

要读取并打印整个文件的内容,有几种实用的方法,根据你的需求选就行:


方法1:一次性读取所有行到数组(适合小文件)

把读取操作放在列表上下文(赋值给数组),就能一次性把所有行读进来,然后直接打印整个数组:

use strict;
use warnings;
open(my $fh, "<", "input.txt") or die "cannot open input text!";
my @all_lines = <$fh>;  # 列表上下文:读取全部行到数组
print @all_lines;       # 打印所有内容,保留原换行格式
close $fh;              # 记得关闭文件句柄,养成好习惯

方法2:修改输入记录分隔符,一次性读入整个文件(适合小文件)

Perl有个特殊变量$/,默认是换行符,控制<$fh>每次读取的"记录"长度。把它设为undef,就能一次性读取整个文件到单个标量里:

use strict;
use warnings;
open(my $fh, "<", "input.txt") or die "cannot open input text!";
local $/;  # 局部修改分隔符,只在当前作用域生效,不影响其他代码
my $full_text = <$fh>;
print $full_text;
close $fh;

用local很重要,它只会在当前代码块里修改$/,不会污染全局环境。

方法3:逐行读取打印(适合大文件)

如果你的文件很大,一次性加载到内存会很占资源,那就用while循环逐行读取打印,这样内存占用会小很多:

use strict;
use warnings;
open(my $fh, "<", "input.txt") or die "cannot open input text!";
while (my $line = <$fh>) {  # 每次循环读取一行,直到文件结束
    print $line;
}
close $fh;

至于你原代码只输出"Hello my",大概率是你的input.txt里"Hello my"后面有个换行符,导致<$fh>只读到了那一行。不管怎样,上面的方法都能帮你打印出整个文件的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:16