2013-04-04 131 views
-4

我有一個來自文件的輸入,我需要將輸入中的羅馬數字轉換爲單詞或整數。 在我的文章有字符串,數字,羅馬數字的組合,但我只需要更改羅馬數字,我使用convert :: number :: roman但它需要整個文本,當然它不是羅馬將羅馬轉換爲Perl中的單詞/數字

當我使用羅馬,它應該轉換我們的價值:

$roman = roman(13);       
$arabic = arabic($roman) if isroman($roman);  

請告訴我嗎?

+5

的第一個問題應該始終是:「是否有CPAN的模塊會做這份工作嗎?「你去http://search.cpan.org/找出。搜索'Roman'會爲初學者揭示模塊['Roman'](http://search.cpan.org/perldoc?Roman);和['Math :: Roman'](http://search.cpan.org/perldoc?Math%3A%3ARoman)和['Text :: Roman'](http://search.cpan.org/perldoc ?Text%3A%3ARoman)和['Convert :: Number :: Roman'](http://search.cpan.org/perldoc?Convert%3A%3ANumber%3A%3ARoman)。 – 2013-04-04 02:55:01

+0

我知道有cpan。仍然嘗試 – new 2013-04-04 03:07:35

+0

,因爲在我的文章中也有字符串,但我只需要將羅馬數字更改爲數字,我使用convert :: number :: roman,但它需要整個文本,當然它不是羅馬 – new 2013-04-04 03:22:34

回答

4

如果我明白了這個問題,您正在嘗試轉換包含在較大文本內的羅馬數字。做這件事最簡單的方法,雖然相當暴力,但會做一個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,​​等等。這當然是由您決定的。

與此相關的,它可能是有趣的在字典上運行的代碼,看看有多少話是有效的羅馬數字:-)

+1

'$ text =〜s/Tim/Brutus /; $ text =〜s/Toady/Julius /' – FMc 2013-04-04 04:28:36

+0

我明白了,但是有沒有線條roman2text?因爲我也想更改爲單詞 – new 2013-04-04 04:44:25

+1

@new:你可以編寫自己的'roman2text',如果這是'roman2int'返回的結果,確保它早點返回'undef'。然後你的子例程中會有一個整數,並可以使用任何其他CPAN模塊將其進一步轉換。 – 2013-04-04 09:40:54