我有一个来自文件的输入,我需要将输入中的罗马数字转换为单词或整数。在我的文章有字符串,数字,罗马数字的组合,但我只需要改变罗马数字,我使用转换::数字::罗马,但它需要整个文本,当然不是罗马
当我使用罗马字体时,它应该转换我们输入的值:
$roman = roman(13);
$arabic = arabic($roman) if isroman($roman);
请告诉我?
如果我理解这个问题,您正在尝试转换包含在较大文本中的罗马数字。要做到这一点,最简单的方法(虽然相当野蛮)是执行eval替换。例如,
#!/usr/bin/env perl
use strict;
use warnings;
use Text::Roman 'roman2int';
my $text = <<'END';
Tim: Let's meet at half past VI.
Toady: Hmm, no good. How about quarter to IX?
END
$text =~ s/b(w+)b/roman2int($1) || $1/ge;
print $text;
由于roman2int
返回undef转换失败,我们简单地尝试转换每个单词,如果成功使用它,则保留原始单词。这当然会有问题,比如有效的罗马数字,如I
, IV
, ID
, DIM
等。这当然取决于你。
与此相关的是,在字典上运行代码并查看有多少单词是有效的罗马数字可能会很有趣:-)