regex - 为什么这个 perl prog 不打印翻译后的文本?

标签 regex perl

我是 Perl 和一般编程的新手,我刚刚了解了正则表达式和替换运算符。

#!/usr/bin/perl

open(LEET, "leet.txt") or die "Can't open leet.txt: $!\n";
while($line = <LEET>) {
    $line =~ s/4/a/gi, s/3/e/gi;
}
print $line;

为什么他不打印任何东西?我想制作一个 leet talk 翻译器,它可以打开一个文本文件并打印出翻译后的文本。

最佳答案

您只打印最后行。尝试将 print 移动到循环内:

while($line = <LEET>) {
    $line =~ s/4/a/gi;
    $line =~ s/3/e/gi;
    print $line;
}

我还使用了两个单独的正则表达式替换,您无法按照问题中显示的方式将它们组合起来。

请注意,Perl 还具有 tr 运算符,这是一步执行两个(单字符)替换的另一种方法:

$line =~ tr/43/ae/;

关于regex - 为什么这个 perl prog 不打印翻译后的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102260/

相关文章:

perl - 是否有一种自动方法来发现与 Embperl 2.x 不兼容的 Embperl 1.x 语法?

perl - Perl 中 'foreach' 的行为

python - 非捕获组中的捕获组

javascript - Google Script 中的正则表达式匹配 = null,但适用于 JSFiddle/RegExr

android, matcher.appendReplacement(sb, '$8' ) 通过 ArrayIndexOutOfBoundsException

database - 使用 DBIx::Class 在 SQLite 数据库上创建索引

perl - 高效的 p​​re-perl-5.10 相当于包 ("Q>")

c# - 使用正则表达式从 C# 中基于另一个字符串的字符串中提取一个单词

java - Pattern.split 比 String.split 慢

perl - 如何创建数据结构的可重复签名?