我有一個需求,我需要在第一次出現變量時在循環內部執行語句。perl中的觸發器操作符
例如: 鑑於陣列我@rand_numbers = qw(1 2 1 2 3 1 3 2);
我知道有數組中存在的只有3個值(即在這種情況下,1,2和3)
我要打印的東西(或做某事)上第一次遇到每個值(僅在第一次遇到並且從不重複時纔會連續遇到相應的值)。
下面是一個方法
my @rand_numbers = qw(1 2 1 2 3 1 3 2);
my $came_across_1=0, $came_across_2=0, $came_across_3=0;
for my $x(@rand_numbers) {
print "First 1\n" and $came_across_1=1 if($x==1 and $came_across_1==0);
print "First 2\n" and $came_across_2=1 if($x==2 and $came_across_2==0);
print "First 3\n" and $came_across_3=1 if($x==3 and $came_across_3==0);
print "Common op for -- $x \n";
}
有沒有辦法實現上述結果與像$came_across_x
沒有變? [即?用觸發器運營商的幫助下]
感謝, 蘭芝斯
假設你想要做什麼是你遇到的每個不同的項目相同,你可以很容易地將它分解成一個子程序並寫出'do_for_first($ x),除非$ seen {$ x} ++; do_for_all($ x);' – 2010-11-22 10:39:33
嗨克里斯,我的主要動機是不使用臨時變量[就像在這種情況下,你已經使用'%看到'哈希]。對不起,如果我的問題很混亂。然而,對於這種情況,你所建議的是最佳方法,但要了解perl中的可用單行程序,我想知道是否只能使用觸發器操作符(或其他特殊變量/特殊操作符)才能完成此操作。 – Ranjith 2010-11-22 15:28:41
@Ranjith請注意,使用單個哈希表比您的'$ came_across_i'變量更好,更靈活。 – 2010-11-22 19:21:55