锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Perl 浣滀負(fù)涓縐嶈剼鏈璦鍙互瀹炴椂鍦扮敓鎴愬拰鎵ц浠g爜銆傝繖縐嶇壒鎬у彲浠ユ妸浠g爜鐨勭紪璇戞帹榪熷埌榪愯鏃訛紝鎵浠ュ張縐頒負(fù)鈥滃姩鎬佷唬鐮佲濄傚彟澶栵紝 Perl 涔熷 Java 銆?/span> C++ 涓鏍鋒彁渚涗簡寮傚父澶勭悊鏈哄埗銆傛湰鏂囧皢鍒濇鎺㈣ Perl 涓疄鐜板姩鎬佷唬鐮佸拰寮傚父澶勭悊鏈哄埗鐨勫嚱鏁幫細(xì) eval 銆傚鏈夐敊璇笉瓚籌紝嬈㈣繋璁ㄨ鍜屾壒璇勬寚姝c?/span>
eval 鍑芥暟鍙互鐪嬩綔鏄?/span> Perl 铏氭嫙鏈猴紝瀹冪殑鍙傛暟灝辨槸涓孌?/span> Perl 浠g爜銆傚埄鐢?/span> 鈥檖erldoc 鈥揻 eval鈥?/font> 鍙互鑾峰彇 eval 鍑芥暟浣跨敤甯姪錛屽叾涓粙緇嶄簡瀹冪殑涓ょ浣跨敤鏂瑰紡錛?/span>
l聽聽聽聽聽聽聽聽
eval EXPR
EXPR 鏄竴涓殑琛ㄨ揪寮忥紝渚嬪錛?/span>
eval
"print $a"
;
eval
'print $a'
.
', $b'
;
eval
1
+
3
;
eval
'print '
.
'$a + $b, "\n"'
;
eval
$command;#$command = 鈥榩rint 鈥渉ello Perl鈥濃?/span>
eval
$ARGV[0];
鍦ㄦ墽琛屾椂錛?/span> Perl 瑙i噴鍣ㄤ細(xì)棣栧厛瑙f瀽琛ㄨ揪寮忕殑鍊鹼紝鐒跺悗灝嗚〃杈懼紡鍊間綔涓轟竴鏉?/span> Perl 璇彞鎻掑叆褰撳墠鎵ц涓婁笅鏂囥傛墍浠ワ紝鏂扮敓鎴愮殑璇彞涓?/span> eval 璇彞鏈韓鍏鋒湁鐩稿悓鐨勪笂涓嬫枃鐜銆傝繖縐嶆柟寮忎腑錛屾瘡嬈℃墽琛?/span> eval 璇彞錛岃〃杈懼紡閮戒細(xì)琚В鏋愩傛墍浠ワ紝濡傛灉 eval EXPR 濡傛灉鍑虹幇鍦ㄥ驚鐜腑錛岃〃杈懼紡鍙兘浼?xì)琚В鏋愬娆°?/span> eval 鐨勮繖縐嶆柟寮忎嬌寰?/span> Perl 鑴氭湰紼嬪簭鑳藉疄鏃剁敓鎴愬拰鎵ц浠g爜錛屼粠鑰屽疄鐜頒簡鈥滃姩鎬佷唬鐮佲濄?/span>
l聽聽聽聽聽聽聽聽
eval BLOCK
BLOCK 鏄竴涓唬鐮佸潡錛屼緥濡傦細(xì)
eval {print $a};
eval {$a = 1, $b = 2, $c = $a + $b};
涓庣涓縐嶆柟寮忎笉鍚岋紝 BLOCK 鍙細(xì)琚В鏋愪竴嬈★紝鐒跺悗鏁翠釜鎻掑叆褰撳墠 eval 鍑芥暟鎵鍦ㄧ殑鎵ц涓婁笅鏂囥傜敱浜庤В鏋愪笂鐨勬ц兘鐨勪紭鍔匡紝浠ュ強鍙互鍦ㄧ紪璇戞椂榪涜浠g爜璇硶媯鏌ワ紝榪欑鏂瑰紡閫氬父琚綔涓?/span> Perl 鐢ㄦ潵涓轟竴孌典唬鐮佹彁渚涘紓甯告崟鎹夋満鍒訛紝铏界劧鍓嶄竴縐嶆柟寮忎篃鍙互銆?/span>
鎸夊府鍔╃殑鍚嶇О錛岀О eval 鐨勫弬鏁扮▼搴忎負(fù)鈥滃皬紼嬪簭鈥?/span> (mini-proggram) 銆傚湪涓ょ鏂瑰紡涓紝 eval 鍑芥暟鐨勮繑鍥炲奸兘鏄皬紼嬪簭鐨勬渶鍚庝竴鏉¤鍙ョ殑鍊鹼紝濡傛灉閬囧埌 return 璇彞錛屼笌瀛愪緥紼嬬浉鍚屻?/span>
Script1:
#!/usr/bin/perl -w
push
(
@program,'$i = 1;');
push
(
@program,'$i = 3; $j = 2; $k = $i + $j');
push
(
@program, '$i = 3; return 24; $k = $i + $j');
foreach
$exp (@program)
{
聽聽聽
$rtn =eval($exp);
聽聽聽
print
$rtn,"\n";
}
Output:
1
5
24
|
濡傛灉灝忕▼搴忎腑鏈夎娉曢敊璇佽繍琛屾椂閿欒閬囧埌 die 璇彞錛?/span> eval 灝嗚繑鍥?/span> undef 銆傞敊璇爜琚繚瀛樺湪 $@ 涓?/span>
Script2:
#!/usr/bin/perl -w
push
(
@program, '$i = 3; die "error message"; $k = $i + $j');
foreach
$exp (@program)
{
聽聽聽
$rtn =eval($exp);
聽聽聽
if
(
!
defined
(
$rtn))
聽聽聽
{
聽聽聽聽聽聽
print
"Exception: "
,
$@,"\n";
聽聽聽
}
聽聽聽
else
聽聽聽
{
聽聽聽聽聽聽
print
$rtn,"\n";
聽聽聽
}
}
;
Output:
Exception: error message at (eval 1) line 1.
|
Script3:
#!/usr/bin/perl -w
# a run-time error
eval
'$answer ='
;聽聽
# sets $@
warn
$@ if$@;
Output:
syntax error at (eval 1) line 2, at EOF
|
浣跨敤php鐨勭▼搴忓憳灝辨病鏈夎繖涓儲鎭鹼紝鍥犱負(fù)php榛樿浼?xì)灏嗛敊璇兘鎵撳嵃鍒皺宓闈笂銆侰GI紼嬪簭閲屽浣曟墠鑳藉仛鍒拌繖涓鐐瑰憿錛?/p>
CGI::Carp榪欎釜妯″潡鏀寔榪欎釜鍔熻兘錛屼互涓嬫槸渚嬪瓙錛?/p>
use CGI::Carp qw(fatalsToBrowser);
die "Bad error here";
璇︾粏璇峰弬闃?a >CGI::Crap鐨勫湪綰挎墜鍐?/p>
閭e鏋滄槸鑷繁鍐欑殑綆鍗旵GI紼嬪簭錛屼笉浣跨敤CGI.pm鎬庝箞鍔烇紵浠ヤ笅鏄畝鍗曠殑鏂規(guī)硶......
BEGIN {
# fatal handler setting.
$SIG{__DIE__} = $SIG{__WARN__} = \&some_func;
}
#!/usr/bin/perl -wuse strict
BEGIN {
# fatal handler setting.
$SIG{__DIE__} = $SIG{__WARN__} = \&handler_fatal;
}
# some perl code goes here
......
sub handler_fatal {
print "Content-type: text/html\n\n";
print "@_";
}
涓婇潰榪欐perl紼嬪簭涓紝濡傛灉璋冪敤涓涓悕縐頒負(fù)abc();鐨勫瓙渚嬬▼錛屾祻瑙堝櫒灝嗙湅鍒板涓嬬殑閿欒淇℃伅錛?/p>
Undefined subroutine &main::abc called at /home/hzqbbc/cgi-bin/fatal.cgi line 8.
閫氳繃榪欎釜鏂規(guī)硶灝卞彲浠ュ緢綆渚跨殑榪涜紼嬪簭璋冭瘯浜嗐侲xtmail涓殑CGI.pm灝辨槸浣跨敤綾諱技鐨勬柟娉曪紝鍙互鎹曟崏die(), warn() 絳夊嚱鏁頒駭鐢熺殑閿欒鍙婄郴緇熺殑閿欒鎻愮ず銆?br />
from: http://www.hzqbbc.com/blog/arch/2005/05/aecgicexception.html
棣栧厛閫氳繃 new 鏉ュ垵濮嬪寲涓涓?ForkManager 瀵硅薄錛屽悓鏃跺繀欏繪爣鏄庢渶澶ц繘紼嬫暟銆傚鏋滀嬌鐢?0 鐨勮瘽灝卞彲浠ラ伩鍏?fork 鏉ヨ揪鍒拌皟璇曠▼搴忕殑浣滅敤銆?/p>
鐒跺悗浣跨敤 $pm->start 鏉ュ紑濮?fork銆?$pm 鍦ㄥ瓙榪涚▼鏃惰繑鍥?0 ,鐖惰繘紼嬫椂榪斿洖瀛愯繘紼嬬殑榪涚▼鍙鳳紙鍏蜂綋璇峰弬闃?Perl 鐨?fork 鏂囨。錛夈傗渁nd next鈥?鐢ㄦ潵璺寵繃鐖惰繘紼嬨傛敞鎰忥細(xì)濡傛灉 fork 澶辮觸鐨勮瘽錛?$pm->start 灝辨彁紺洪敊璇紝紼嬪簭緇撴潫銆?/p>
$pm->finish 緇撴潫瀛愮▼搴忥紙鍋囪鎴戜滑涓寮濮嬩嬌鐢ㄤ簡 start 鏉?fork錛?/p>
娉ㄦ剰錛氬湪瀛愯繘紼嬩腑涓嶈兘浣跨敤 $pm->start銆?濡傛灉浣犳兂鍦ㄥ瓙榪涚▼涓嬌鐢ㄥ彟澶栦竴緇勫瓙榪涚▼錛屼綘蹇呴』鍐嶅垵濮嬪寲涓涓?Parallel::ForkManager 瀵硅薄銆?br />
from: http://www.perlchina.org/archive/archive.php?action=archive&page=44
鍑犱釜涓昏鐨?CPAN 绔欑偣鏈夛細(xì)
瀹夎鏂規(guī)硶
鎴戝湪榪欓噷浠嬬粛涓涓嬪悇縐嶅鉤鍙頒笅 perl 妯″潡鐨勫畨瑁呮柟娉曘備互瀹夎DBI妯″潡涓轟緥銆?/p>
Linux/Unix涓嬬殑瀹夎鏂規(guī)硶錛?/strong>
Linux/Unix 涓嬪畨瑁?Perl 妯″潡鏈変袱縐嶆柟娉曪細(xì)鎵嬪伐瀹夎鍜岃嚜鍔ㄥ畨瑁呫傜涓縐嶆柟娉曟槸浠?CPAN 涓婁笅杞芥?zhèn)ㄩ渶瑕佺殑妯″潡錛屾墜宸ョ紪璇戙佸畨瑁呫傜浜岀鏂規(guī)硶鏄嬌鐢?CPAN 妯″潡鑷姩瀹屾垚涓嬭澆銆佺紪璇戙佸畨瑁呯殑鍏ㄨ繃紼嬨?/p>
cd /usr/local/src
tar xvzf DBI-1.13.tar.gz
cd DBI-1.13
make test
make install
$>perl -MDBI -e1
perl -MCPAN -e shell
cpan>help
cpan>m
cpan>install DBI
cpan>quit
Win32涓嬬殑瀹夎鏂規(guī)硶錛?/strong>
鍦?Win32 涓嬶紝寤鴻浣跨敤 Active State 鐨?Perl for Win32錛屽嵆Active Perl銆侫ctive Perl 鐨勪富欏靛湪錛?br />http://www.activestate.com/ 銆?br />鍦?Win32 涓嬶紝姣旇緝瀹規(guī)槗鐨勬槸浣跨敤涓撻棬涓?Active Perl? 瀹氬埗鐨?Perl 妯″潡銆傜被浼間簬 CPAN 妯″潡錛?span class="newWikiWord">Active State涔熷紑鍙戜簡涓涓嚜鍔ㄥ畨瑁呭伐鍏峰彨鍋?/span>PPM錛圥erl Package Manager錛夈?/p>
ppm
PPM>h
cpan>query DBI
cpan>search DBI
PPM>install DBI
PPM>q
C: \ > set HTTP_proxy=http://proxy:8080
perl -e "print join ' ' @INC"
鏄劇ず鍑?perl 鐨勫簱璺緞銆?>ppm install http://theoryx5.uwinnipeg.ca/ppms/GD.ppd
>ppm install http://theoryx5.uwinnipeg.ca/ppmpackages/GD.ppd
浠ヤ笂杈冧負(fù)璇︾粏鍦版弿榪頒簡鍚勭騫沖彴涓?Perl 妯″潡鐨勫畨瑁呮柟娉曘傚笇鏈涜兘澶熷府鍔╁浗鍐?Perl 鐖卞ソ鑰呬滑閫氳繃浣跨敤鐜版湁澶ч噺浼樼鐨?Perl 妯″潡錛岄伩鍏嶉噸澶嶅姵鍔紝鎻愰珮鏁堢巼錛屾洿濂藉彂鎸?Perl 璇█鐨勫己澶у▉鍔涖?br />
from: http://www.perlchina.org/archive/archive.php?action=archive&page=51
Now you can type in any legal Perl code, and it will be immediately evaluated. You can also examine the symbol table, get stack backtraces, check variable values, and if you want to, set breakpoints and do the other things you can do in a symbolic debugger.
from: http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q3.1.html
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SCALAR
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ARRAY
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 HASH
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 CODE
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 REF
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 GLOB
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LVALUE
聽聽聽聽聽聽聽聽聽聽聽 If the referenced object has been blessed into a package, then
聽聽聽聽聽聽聽聽聽聽聽 that package name is returned instead. You can think of "ref" as
聽聽聽聽聽聽聽聽聽聽聽 a "typeof" operator.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (ref($r) eq "HASH") {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 print "r is a reference to a hash.\n";
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 unless (ref($r)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 print "r is not a reference at all.\n";
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (UNIVERSAL::isa($r, "HASH")) {聽 # for subclassing
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 print "r is a reference to something that isa hash.\n";
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 See also perlref.
聽