我有一个需求,我需要在第一次出现变量时在循环内部执行语句。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