在Perl中,當使用sort
函數進行自定義比較時,已將變量$a
和$b
分配給當前要比較的元素對,例如,在:如何調用預先分配給某個值的變量的子程序?
@decreasing = sort { $b <=> $a } @list;
如何編寫其他子程序具有類似的功能?例如,假設我想寫一種process_and_store
函數,它對列表中的每個項目做一些特殊的處理,然後將其存儲在數據庫中;並且變量$item
已被分配給正在處理的當前項目。我想編寫例如類似:
process_and_store { do_something_with($item); } @list;
不是
process_and_store { my $item = shift; do_something_with($item); } @list;
我應該如何去這樣做呢?
UPDATE:爲了完整起見,雖然flesk's answer作品沒有問題,爲了「正確」定位的變化讓我對$item
可變我都得跟着advice from Axeman。在SomePackage.pm
我把這樣的:
#!/usr/bin/perl -w
use strict;
use SomePackage;
process_and_store { print "seen: $item\n"; } (1, 2, 3);
,並得到預期的結果:
seen: 1
stored: 1
seen: 2
stored: 2
seen: 3
stored: 3
我試圖按照你的建議來「本地化」變量名的變化;但不能讓它工作。我已經用細節更新了我的問題。你能幫忙嗎? –
@JuanAntonio,查看更新。 – Axeman
嗯..我期待'我們的@EXPORT = qw(process_and_store $ item);'照顧這個。事實上,如果我按照你的建議添加一個'import' sub(並從導出列表中刪除'$ item'),'process_and_store'似乎不再被導出。 –