Perl 通過子過程的引用來調用子過程

來源:互聯網
上載者:User
假如我有一個子過程,定義如下:

sub test_sub {
print "test";
}

我又有一個變數:

$test = "test_sub";

這個 $test 的值剛好就是上面子過程的名稱。既然我通過 $test 知道了這個子過程名稱,我可以通過 $test 達到調用這個子過程的目的嗎?也就是說,我讓使用者從命令列裡輸入一個子過程的名稱,然後就可以根據這個名稱來調用相對應的子過程。
方法一,直接根據使用者輸入的子過程名來調用該子過程。
完整的例子代碼如下:

use warnings;
no strict 'refs';

sub test_sub {
print "test";
}

$test = "test_sub";

$test->();

&{$test}(); #anyway to invoke the subroutine

這裡要注意,需要用

no strict 'refs';

這個語句,否則指令碼不能運行,Perl 解譯器會提示類似於下面的錯誤:
Global symbol “$test” requires explicit package name at test2.pl line 10.
方法二,更常規的做法是專門用一個起指派作用的散列,根據使用者輸入的請示而調用相應的子過程。例如下面的 %dispatcher 就起到了綁定識別標記與相應子過程引用的作用,通過這個唯一的標記 (key),我們可以很容易地找到對應的子過程引用。

my %dispatcher = (
[...]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.