【发布时间】:2014-04-14 22:15:07
【问题描述】:
我有一个这样的文本文件
mc1s2 L#'|NA|det indice|indice|nc Sensex|NA|adj
progressait|progresser|v de|de|prep
还有这样的文件文本
programmer:_[1]_:_P0_(P1)=1 progresser:_[1]_:_P0=1
prohiber:_[1]_:_P0_P1=1
projeter:_[3]_:_P0_P1=1;_:_P0_P1_(PL)=1;_:_P0_P1_(PP<sur>)=1
我想进行替换以创建像这样的第三个文件文本
mc1s2 L#'|NA|det indice|indice|nc Sensex|NA|adj
progresser:_[1]_:_P0=1 de|de|prep As you can see I'd like to replace
progressait|progresser|v with progresser:_[1]_:_P0=1.
我想对所有动词都这样做。
这个脚本回答了我的迫切要求,但我无法理解它的最后一部分
use strict;
use warnings;
use autodie;
my $lookupfile = 'lookup.txt';
# Contains:
# programmer:_[1]_:_P0_(P1)=1
# progresser:_[1]_:_P0=1
# prohiber:_[1]_:_P0_P1=1
# projeter:_[3]_:_P0_P1=1;_:_P0_P1_(PL)=1;_:_P0_P1_(PP<sur>)=1
my $datafile = 'data.txt';
# Contains:
# mc1s2 L#'|NA|det indice|indice|nc Sensex|NA|adj progressait|progresser|v de|de|prep
my %lookup;
open my $fh, '<', $lookupfile;
while (<$fh>) {
chomp;
my ($field) = split ':';
$lookup{$field} = $_;
}
# use Data::Dump; # Used to debug the lookup table.
# dd \%lookup;
open $fh, '<', $datafile; while (<$fh>) {
s{(?<=\s)(\S+)} {
my $entry = $1;
my @fields = split '\|', $entry;
$lookup{$fields[1]} // $entry;
}eg;
print;
}
我无法理解:
open $fh, '<', $datafile;
while (<$fh>) {
s{(?<=\s)(\S+)}{
my $entry = $1;
my @fields = split '\|', $entry;
$lookup{$fields[1]} // $entry;
}eg;
你能帮帮我吗?
【问题讨论】:
-
这是我一周前提供给另一个问题的代码。我会建议您简单地在评论中回复该答案,但由于某种原因,stackoverflow 上不再存在该问题。烦人:/
-
为此我再次编写了代码!非常感谢您的帮助! :)
标签: regex perl hashtable substitution