【发布时间】:2015-06-03 09:36:55
【问题描述】:
我正在尝试制作一个脚本,该脚本将接收带有重音字符的字符串,并返回它们的非重音字符。
在四处寻找帮助和教程后,我设法做出了几乎可以工作的东西,但是我遇到了问题。
我的代码做我想做的事,只要我希望它在一个简单的字符串上完成,但是当我想使用 <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__
öüóőúéáű
编辑2:
我现在做了以下事情: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> = űáéúőóüöí
【问题讨论】:
-
use open qw(:std :utf8); -
@Сухой27 我将它添加到脚本的顶部,现在添加重音字符时,我得到以下信息:
utf8 "\xA0" does not map to Unicode at regex.pl line 20, <STDIN> line 1. Malformed UTF-8 character (unexpected end of string) in length at regex.pl line 22, <STDIN> line 1. -
你在用windows吗?
-
@Сухой27 是的,Windows 8 Pro x64
标签: regex windows perl utf-8 stdin