我正在尝试创建一个脚本,该脚本将带有带重音字符的字符串,并返回其无重音的对应物。
在设法找到一些帮助和教程之后,我设法制作了几乎可以工作的东西,但我遇到了问题。
我的代码完成了我想要的,只要我想在一个简单的字符串上完成它,但当我想使用<STDIN>
时,它完全没有。
我的代码:
use strict;
use warnings;
my %replace = (
'é' => "e",
'á' => "a",
'ő' => "o",
'ö' => "o",
'ó' => "o",
'ú' => "u",
'ü' => "u",
'ű' => "u",
'í' => "i",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
my $s = <STDIN>;
$s = substr $s, 0, length($s) - 1;
my $var = "$s - öüóőúéáű";
$var =~ s/($regex)/$replace{$1}/g;
$s = $var;
print "$s\n";
如果我向<STDIN>
输入“öüóőúéáű”,我会得到以下输出:
öüóőúéáű - ouooueau
有人能告诉我我做错了吗?
编辑:
我检查过,当使用它时,如下所示(使用<DATA>
代替<STDIN>
),它可以正常运行:
use strict;
use warnings;
my %replace = (
'é' => "e",
'á' => "a",
'ő' => "o",
'ö' => "o",
'ó' => "o",
'ú' => "u",
'ü' => "u",
'ű' => "u",
'í' => "i",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
my $s = <DATA>;
$s = substr $s, 0, length($s) - 1;
my $var = "$s - öüóőúéáű";
$var =~ s/($regex)/$replace{$1}/g;
$s = $var;
print "$s\n";
__DATA__
öüóőúéáű
EDIT2:
我现在执行了以下操作:my $s = <DATA>." - ".<>;
因此它会从<DATA>
以及<STDIN>
读取字符,现在我意识到它仍然与<DATA>
匹配并注意到<STDIN>
,所以我得到以下输出:
uaeuoouoi - űáéúőóüöí - uaeuoouoi
:
use strict;
use warnings;
use utf8;
my %replace = (
'é' => "e",
'á' => "a",
'ő' => "o",
'ö' => "o",
'ó' => "o",
'ú' => "u",
'ü' => "u",
'ű' => "u",
'í' => "i",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
my $s = <DATA>." - ".<>;
$s = substr $s, 0, length($s) - 1;
my $var = "$s - űáéúőóüöí";
$var =~ s/($regex)/$replace{$1}/g;
$s = $var;
print "$s\n";
__DATA__
űáéúőóüöí
其中<STDIN>
=űáéúőóüöí
答案 0 :(得分:2)
在我的程序中,我得到了预期的结果:
use strict;
use warnings;
my %replace = (
'é' => "e",
'á' => "a",
'ő' => "o",
'ö' => "o",
'ó' => "o",
'ú' => "u",
'ü' => "u",
'ű' => "u",
'í' => "i",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
my $s = <DATA>;
$s = substr $s, 0, length($s) - 1;
my $var = "$s - öüóőúéáű";
$var =~ s/($regex)/$replace{$1}/g;
$s = $var;
print "$s\n";
__DATA__
öüóőúéáű
我得到的地方:
$ perl test.pl
ouooueau - ouooueau
所以你有另一个问题,比如编码问题。
您可以尝试添加到您的计划中。
use utf8;
此外,您可以像这样简化您的计划:
use strict;
use warnings;
my %replace = (
'é' => "e",
'á' => "a",
'ő' => "o",
'ö' => "o",
'ó' => "o",
'ú' => "u",
'ü' => "u",
'ű' => "u",
'í' => "i",
);
while(<DATA>) {
for my $key (keys %replace) {
s/$key/$replace{$key}/;
}
print;
}
__DATA__
öüóőúéáű