免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
- Perl - 請問怎么用一個標(biāo)量來引用一個方法 并執(zhí)行此方法呢?

ChinaUnix.net ? Perl ? 請問怎么用一個標(biāo)量來引用一個方法?并執(zhí)行此方法呢?

頁: [1]

xxgsky 2005-12-2 08:15
請問怎么用一個標(biāo)量來引用一個方法?并執(zhí)行此方法呢?

假設(shè):
sub aa{
     my ($a,$b)=@_;
     return $a.$b;
}
正常的調(diào)用
$str = aa("aa","bb");
我的想法是將一個標(biāo)量指向一個方法,并將此方法存入散列表中,并在需要要調(diào)出此標(biāo)量,并通過正則表達(dá)式替換其參數(shù),并運(yùn)行該方式.
我試過一個比較笨的方法,就是把整個方法當(dāng)作一個字符串賦值給標(biāo)量$str,并通過eval $str來執(zhí)行.但我不想用這種方式,我想請教一下有沒有更好的方法.

fayland 2005-12-2 08:21
$str = \&aa;
$str->(‘a(chǎn)a‘, ‘‘bb‘);

蘭花仙子 2005-12-2 08:26
[quote]原帖由 [i]xxgsky[/i] 于 2005-12-2 16:15 發(fā)表
假設(shè):
sub aa{
     my ($a,$b)=@_;
     return $a.$b;
}
正常的調(diào)用
$str = aa("aa","bb");
我的想法是將一個標(biāo)量指向一個方法,并將此方法存入散列表中,并在需要要調(diào)出此標(biāo)量,并通過 ... [/quote]


use strict;
my $a=‘111‘;
my $b=‘222‘;

sub aa{
  return sub { return $_[0].$_[1]; };
}

my $ref=aa();

print $ref->($a,$b);

不知是否你想要的。

xxgsky 2005-12-2 09:04
呵呵,想不到這么快就有人回復(fù),這個論壇作為信息交流真是太好的,真是謝謝各位的支持!
你們哪種方式引用我都明白,但不是我要的效果,因?yàn)槲蚁胂喟逊椒ǚ诺缴⒘斜碇?
$methodstr1 引用 aa($a,$b);
$methodstr2 引用 bb($a,$b);

%hash{"command1"} = $methodstr1; #把方法存到散列中
%hash{"command2"} = $methodstr2;

我調(diào)用是可以通過
$mothod = %hash{"command1"} #根據(jù)命令調(diào)出方法
$mothod =~/(\$a),(\$b)/%other{$1},%other{$2}/;#替換方法中的參數(shù),即賦值

eval $mothod; #運(yùn)行最后得出的方法

我的想法是這樣,呵呵,不知自己描述夠不夠清楚呢?請教各位怎么有更好的實(shí)現(xiàn)形式(我不想通過eval的形式).我現(xiàn)在正在寫一個XML格式的描述語言,并用perl來解析,最后生成純perl的代碼,并自動運(yùn)行此perl代碼,以上過程是我的部份想法.

apile 2005-12-2 09:16
#!/usr/bin/perl
sub aa{
  my ($a,$b) = @_;
  return $a.$b;
}

$method = "aa";

$hash{method1}  = $method;

print &{$hash{method1}}("123","456")."\n";


你應(yīng)該說的是類似這類的吧......

xxgsky 2005-12-2 10:15
明白,我大概意思就是這樣了,呵呵,謝謝大俠!

xxgsky 2005-12-5 02:27
[quote]原帖由 [i]apile[/i] 于 2005-12-2 17:16 發(fā)表
#!/usr/bin/perl
sub aa{
  my ($a,$b) = @_;
  return $a.$b;
}

$method = "aa";

$hash{method1}  = $method;

print &{$hash{method1}}("123","456")."\n& ... [/quote]
#!/usr/bin/perl
sub aa{
  my ($a,$b) = @_;
  print $a.$b;
  return $a.$b;
}

$method = "aa";

$hash{method1}  = $method;

&{$hash{method1}}("123","456");

$tt = ‘a(chǎn)a("123",BB)‘;

print ‘$tt = ‘ , $tt, "\n";

$tt =~s/BB/\"456\"/;

print ‘$tt = ‘ , $tt, "\n";
&$tt;
為什么我在后面加上我的測試代碼,運(yùn)行時會拋出如下錯誤:

123456$tt = aa("123",BB)
$tt = aa("123","456")
Undefined subroutine &main::aa("123","456") called at tmothod.pl line 21.

請指點(diǎn).

fayland 2005-12-5 03:06
print ‘$tt = ‘ , $tt, "\n";
eval($tt);
die $@ if ($@);

apile 2005-12-5 03:37
[quote]原帖由 [i]xxgsky[/i] 于 2005-12-5 10:27 發(fā)表

#!/usr/bin/perl
sub aa{
  my ($a,$b) = @_;
  print $a.$b;
  return $a.$b;
}

$method = "aa";

$hash{method1}  = $method;

&{$hash{method1}}("123","456" ... [/quote]

因?yàn)槟悴荒馨?method與argument當(dāng)成HASH of PACKAGE的key...
你只能先引用出method..再給他叁數(shù)...perl沒有辦法做到你想要的....
其實(shí)你的動作...如果只是在改變量,為什麼你不把兩部分分開,
1.先找到要的method..
2.再決定要丟進(jìn)去什麼叁數(shù)...
當(dāng)然除非你的XML設(shè)定中,連變量都寫進(jìn)去了...那就沒輒了.
如果是這樣...建議是在XML設(shè)定中..
method與argument要分開設(shè)定...

xxgsky 2005-12-5 03:40
其實(shí)我知道可以用eval,但我想知,為什么試的代碼不行,我想知
&{$hash{method1}}("123","456");

&$tt;有什么不同?
因?yàn)閜rint &{$hash{method1}}("123","456");和print &$tt;是一樣的.
是了&{$hash{method1}}("123","456");這個句子操作符的優(yōu)先級是什么啊?

fayland 2005-12-5 03:54
你后來的 $tt 變成了字符串了,而不是 sub 的引用了。sub 的引用才是用 &$tt 而字符串的話就要用 eval 了。

apile 2005-12-5 04:50
在perl的代碼里面..每支程序都會有一個main package,如果不指明packagge,
則每支perl程序都是main packege...
而這個package里面有個hash of table紀(jì)錄全域變量與local變量....全域變量包含
hash、array、scalar variable、filehandle或ref...
當(dāng)你使用sub aa的時候 ,就是在跟這個hash記錄有個key是aa的subroutine...
而後我們要使用他, 可以使用&{aa}去讓他指向?qū)嶋H存放aa subroutine的位址...
所以&{aa}等於呼叫aa這個subroutine..因?yàn)樗枰獌蓚€argument..所以還要再給他...

但是你的$tt是純粹string...當(dāng)你使用&{$tt}的時候...perl會去找main package的hash,
看里面有沒有$tt這個key..然後因?yàn)闆]有$tt這個key..所以perl會回傳你看到的error...
大致是這樣..講錯的話..請指證...謝謝..

[[i] 本帖最后由 apile 于 2005-12-5 13:07 編輯 [/i]]

xxgsky 2005-12-5 05:34
哦,我明白了,謝謝,但如果我要用eval,我怎么可以得到返回值呢?

apile 2005-12-5 08:55
在eval中用return...
例如:
my $rtn = eval{ return 1; };
試試看...

xxgsky 2005-12-5 10:16
可以了,謝謝啊,呵呵!
利用eval的返回值比我用正則表達(dá)式的提取方法名及參數(shù)的方式簡單很多啊!


查看完整版本: 請問怎么用一個標(biāo)量來引用一個方法?并執(zhí)行此方法呢?


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
perl基本語法
Perl引用reference(\運(yùn)算符)
Perl 子程序(函數(shù)) | 菜鳥教程
【轉(zhuǎn)載】從C到Perl
defined exist函數(shù):Perl
perl學(xué)習(xí)筆記----從五分鐘到三十秒
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服