use strict;
use warnings;
use 5.020;
use autodie;
use Data::Dumper;
# Here, the variables $/, $^I, and @ARGV either have their default values
# or some other values that were set by code appearing here.
{
local $/ = ";"; #local => temporarily change the value of this variable until the closing parenthesis of this block is encountered
local $^I = ".bak";
local @ARGV = 'data.txt';
while (<>) {
my $perl_statement = $_;
$perl_statement =~ s/sql = .*/sql = Query1/xms ;
print $perl_statement; #This is redirected into the file.
}
} #Automatically restores the previous values for $/, $^I, and @ARGV.
$/ => 输入行分隔符(默认 => "\n")。导致<$INFILE> 最多读取并包括指定为一行的字符。
$^I => 如果设置为字符串(默认 => undef),则使菱形运算符 magical,它允许您看似就地编辑文件。任何打印语句都将被写入一个新文件,其名称将与原始文件相同。如果你写$^I = ".bak",那么原始文件将存储在一个带有原始文件名加上“.bak”扩展名的文件中。空白字符串表示没有备份。
@ARGV => 菱形运算符从该数组中的文件读取。
示例运行:
~/pperl_programs$ cat data.txt
String sql="select * from "+
"emp_data";
hello word="select * from "+
"emp_data";
~/pperl_programs$ perl 1.pl
~/pperl_programs$ cat data.txt
String sql = Query1
hello word="select * from "+
"emp_data";
或者,也许您想替换所有出现的模式:
use strict;
use warnings;
use 5.020;
use autodie;
use Data::Dumper;
my $pattern = q{"select * from "+
"emp_data"};
{
local $/ = ";";
local $^I = "";
local @ARGV = 'data.txt';
while (<>) {
my $perl_statement = $_;
$perl_statement =~ s/= \Q$pattern/ = Query1/xms;
print $perl_statement;
}
}
示例运行:
~/pperl_programs$ cat data.txt
String sql="select * from "+
"emp_data";
hello word="select * from "+
"emp_data";
~/pperl_programs$ perl 1.pl
~/pperl_programs$ cat data.txt
String sql = Query1;
hello word = Query1;