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

Perl脚本搜索指定字符串并打印行无输出问题求助

Perl字符串匹配脚本无输出问题修复

核心问题与修复步骤

  • 输入字符串带换行符(最可能的原因)
    从<STDIN>读取的内容会包含用户输入时按下的换行符\n,直接用这个字符串做正则匹配,只会命中末尾带相同换行且包含输入内容的行,几乎不可能匹配成功。解决方法是用chomp去掉换行:

    my $name = <STDIN>;
    chomp $name; # 关键修复:去除末尾的换行符
    
  • 文件打开方式不规范
    你使用的两参数open在严格模式下存在安全风险,建议改用Perl推荐的三参数打开方式,同时使用词法文件句柄(代替全局FH),这样脚本结束时会自动关闭文件,无需手动执行close:

    open(my $fh, '<', $file) or die "无法打开文件 $file: $!";
    
  • 可选优化:匹配灵活性
    如果需要忽略大小写匹配,可以在正则后加i修饰符:

    if ($line =~ /$name/i)
    

    另外变量名尽量符合Perl惯例,比如把$String改成$line,提升代码可读性。


完整修复后的代码

#!/usr/bin/perl

use strict;
use warnings;

sub main {
    print "请输入姓名或部分内容: ";
    my $name = <STDIN>;
    chomp $name; # 去除输入末尾的换行符
    
    my $file = '/home/jake/Downloads/phones';
    # 安全的三参数文件打开方式
    open(my $fh, '<', $file) or die "无法打开文件 $file: $!";
    
    while (my $line = <$fh>) {
        # 匹配包含目标字符串的行,可加i修饰符忽略大小写
        if ($line =~ /$name/) {
            print $line; # 行本身已带换行,无需额外添加\n
        }
    }
}

main();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:45:41