0

伙计们,我从一本书中获得了这个示例代码,该示例代码展示了如何使用正则表达式修改多个文件中的内容。

#!/usr/bin/perl -w
    use strict;
    chomp(my $date = `date`);
    $^I = ".bak";
    while (<>) {
      s/^Author:.*/Author: Randal L. Schwartz/;
      s/^Phone:.*\n//;
      s/^Date:.*/Date: $date/;
      print;
    }

从它的外观来看,我知道缺少某些东西 - 这是文件名。但书坚持。所以当我自己尝试时,它只接受来自键盘的输入,这是我所期望的。所以我有一个修改过的代码,它打开一个文件,但它不会再创建备份:

由这条线处理

$^I = ".out";



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

open (MYFILE,'fewlines');
$^I = ".out";

while (<MYFILE>) {
    s/fred/larry/ig;
    print;
}

这一行也做同样的事情,但在命令提示符下。我想在命令提示符下编写程序本身

perl -p -i.out -w -e 's/fred/larry/ig' filename

如何在程序本身中转换该行?

4

1 回答 1

3

<>, 的缩写<ARGV>,如果有则读取 in 命名的文件@ARGV,否则读取 STDIN。

perl -p -i.out -w -e 's/fred/larry/ig' filename

@ARGV = 'filename';
$^I = '.out'
$^W = 1;
LINE: while (<>) {
   s/fred/larry/ig
} continue {
   die "-p destination: $!\n" unless print $_;
}
于 2013-05-08T05:35:33.240 回答