2012-11-28 19 views
0

我已經嘗試使用°解碼學位ASCII字符:如何在Perl

my $nomIHMBloc = $1; 
print decode_entities($nomIHMBloc), "\n"; 
$nomIHMBloc = decode_entities($nomIHMBloc), "\n"; 

,但沒有運氣。有什麼不對的嗎?我得到錯誤:

Undefined subroutine &main::decode_entities called at "same perl file" 

感謝您的幫助。

PS: 確切的代碼放在這裏:

while($blocVars =~ m/\[(.*?)\]/g){ 
       binmode STDOUT, ':utf8'; 
       my $nomIHMBloc = $1; 
       print decode_entities($nomIHMBloc), "\n"; 
       $nomIHMBloc = decode_entities($nomIHMBloc); 
       print "nomIHMBloc::::::::$nomIHMBloc=============$1\n"; 
       print "insert into ASSOC_VAR_BLOC (ID_BLOC, ID_VAR, DOC_ID_MAQUETTAGE) VALUES ($id_bloc, (SELECT ID_VAR FROM VARIABLE WHERE NOM_IHM='$nomIHMBloc'),'$docId')\n"; 
    } 
+5

你真的包括模塊嗎?含義...你有'使用HTML :: Entities;'? –

+0

@Moritz Bunkus:如果不查找它,我就不會知道使用'HTML :: Entities'。沒有必要這麼「聰明」。 – Borodin

+0

那麼,他確實必須從某個地方得到一個名爲'decode_entities()'的函數,而且他顯示的代碼片段到目前爲止還不是一個完整的測試用例($ 1來自哪裏) 。所以我假設他至少聽說過「HTML :: Entities」,也許這次只是忘了「使用」它。 –

回答

2

在這裏工作罰款:

#!/usr/bin/env perl 

use strict; 
use warnings; 
use open ':locale'; 
use HTML::Entities; 

# example text 
'42°' =~ /(.*)/; # 42° 

# your code 
my $nomIHMBloc = $1; 
print decode_entities($nomIHMBloc), "\n"; 
#$nomIHMBloc = decode_entities($nomIHMBloc), "\n"; 

你的最後一行包含語法錯誤。如果要在分配標量時附加換行符,請使用字符串連接運算符.

$nomIHMBloc = decode_entities($nomIHMBloc) . "\n"; 

它適用於print因爲它是一個列表操作符和需要的參數列表,然後用輸出域加入他們$,(見perlvar),默認包含一個空字符串,其作用就像一個簡單的字符串連接。然而,輸出是

42°

+1

要小心'binmode STDOUT,':utf8';',這是非常棘手的,因爲它期望你的終端被配置爲UTF-8(並非總是如此)! '使用open「:locale」'代替。 – creaktive

+0

請檢查我的情況有什麼不對...... post udpated – SeasonedNoob

+0

@creaktive謝謝,更新! :) – memowe