2013-10-10 23 views

回答

7

該程序將字符串轉換爲斜體,使用Unicode字符作爲數學符號。

#!/usr/bin/perl -CS 

use strict; 
use warnings; 
use 5.010; 

use charnames ':full'; 

my $out; 
foreach (@ARGV) { 
    foreach my $char (split //) { 
    if ($char =~ /[A-Z]/) { 
     my $charname = "MATHEMATICAL ITALIC CAPITAL $char"; 
     $char = charnames::string_vianame $charname; 
    } elsif ($char =~ /[a-z]/) { 
     my $charname = 'MATHEMATICAL ITALIC SMALL ' . uc $char; 
     $char = charnames::string_vianame $charname; 
    } 
    $out .= $char; 
    } 
} 
say $out; 
+0

謝謝!我的Perl抱怨:無法通過utf-italics.pl第17行的包「charnames」找到對象方法「string_vianame」。 –

+0

看起來這個函數是在Perl 5.14中添加的。請參閱https://metacpan.org/module/JESSE/perl-5.14.0/pod/perldelta.pod#N-NAME-and-charnames-enhancements –

+0

我現在有一個可用的Perl並獲得斜體,但是,我的Perl 5.16似乎不喜歡「h」:它表示:「在串聯(。)中使用未初始化的值$ char或在utf-test.pl第19行使用字符串。」 –

0

如果你有一箇舊版本的Perl,您可以使用以下命令:

#!/usr/bin/perl 

binmode(STDOUT, ":utf8"); 

$output=""; 
foreach (@ARGV) 
{ 
foreach $char (split //) 
{ 
    if ($char =~ /[A-Z]/) {$d=119860-65+ord($char); $char = pack("U",$d)} 
    if ($char =~ /h/) {$char="\x{210e}"} 
    if ($char =~ /[a-z]/) {$d=119886-97+ord($char); $char = pack("U",$d)} 
    $output .= $char; 
} 
} 

print "$output\n";