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

Perl读取标准输入(stdin)的方式有哪些?

Perl读取标准输入的多种方法

嘿,很高兴你在探索Perl!那句*“做任何事都有多种方法”*确实是Perl的灵魂,这也是它灵活有趣的地方。关于读取标准输入,除了你提到的预定义文件指针(比如STDIN),还有不少实用的方法,我给你整理几个常用的:

  • 钻石操作符<>:这是Perl里非常便捷的方式,它会自动处理命令行传入的文件参数,如果没有指定文件,就默认读取标准输入。示例代码:

    # 循环读取每一行输入(支持从文件或STDIN读取)
    while (my $line = <>) {
        chomp $line; # 去掉换行符
        print "你输入的内容:$line\n";
    }
    

    运行脚本时如果传入文件(比如perl script.pl input.txt),它会读取文件内容;如果直接运行,就等待你从控制台输入。

  • readline函数:这和直接用<STDIN>是等价的,显式调用函数的方式更清晰,适合需要明确指定文件句柄的场景:

    # 显式读取STDIN的每一行
    while (my $line = readline(*STDIN)) {
        chomp $line;
        say "读取到一行:$line"; # say会自动添加换行符
    }
    
  • 一次性读取全部输入:通过修改输入记录分隔符$/,可以一次性读取所有标准输入内容,直到遇到EOF(比如控制台输入时按Ctrl+D):

    # 临时将输入记录分隔符设为undef,读取全部内容
    local $/;
    my $all_content = <STDIN>;
    say "所有输入内容如下:\n$all_content";
    

    这里用local是为了只在当前作用域修改$/,不会影响其他代码的行为。

  • 底层读取sysread:如果需要处理二进制数据,或者精确控制读取的字节数,可以用sysread,它是更底层的系统调用:

    my $buffer;
    # 每次读取1024字节的内容
    while (my $bytes_read = sysread(STDIN, $buffer, 1024)) {
        say "成功读取$bytes_read字节:$buffer";
    }
    

    sysread会返回实际读取的字节数,当到达输入末尾时返回0。

这些方法各有适用场景,你可以根据自己的需求选择——毕竟Perl的格言就是*“多种方法”*嘛!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:24