¾�ˤ�Ĥä��ߤɤ����Ϥ���ΤǤ�������ϡ�loop control��Ū��ʤäơ�
- ����������: �°פʥ롼�פϿ���٤��Ǥ���
- jnaoya�ΤϤƤ����� - ź�綠��2
[H.I����Υ����Ȥ������ɮ��������]
�ޤ��ϡ�DCONWAY�����ΰ�����顣Loop�˴ؤ��벫��§�Ǥ���Perl�ʳ��Ǥ�Í����
Reject As many iterations as possible, as early as possible. �����֤����ӽ����衢�����ʤ�٤��ᤤ�ʳ���
�ʲ�������������
jnaoya�ΤϤƤ����� - ź�綠��2while (my $log = $logs->readline()) { if ($log->{ua}) { my @jitensha = $log->{ua} =~ $reg; next unless @jitensha; my $pattern; for my $i (0 .. $#jitensha) { if (defined $jitensha[$i]) { $pattern = $analyzeval[$i]; last; } } # Do hoge hoge for $pattern } }
̵�̤˥���ǥ�Ȥ������Ǥ��͡��ޤ��ǽ��if�ϡ����������㤤�ޤ��礦��
next unless $log->{ua};
DCONWAYή�ˡ�unless���ӽ���������С�
next if not $log->{ua};
�Ǥ��������unless�������ʤΤǾ�����Ǥ��͡�
my @jitensha = $log->{ua} =~ $reg; next unless @jitensha;
��������������Ĵ�ҡ��Ǥ���������¤Ϥ�������ޤ���
my (@jitensha) = ($log->{ua} =~ $reg) or next;
for my $i (0 .. $#jitensha) { if (defined $jitensha[$i]) { $pattern = $analyzeval[$i]; last; } }
�Ȥꤢ��������Ū��Loop��������
for my $i (0 .. $#jitensha) { next unless defined $jitensha[$i]; $pattern = $analyzeval[$i]; last; }
�Ȥʤ�ޤ������¤�Loop���Τ�Τ����פǡ�
my @indice = grep { $jitensha[$_] } (0 .. $#jitensha); $pattern = $analyzeval[$indice[0]];
�����
$pattern = $analyzeval[(grep { $jitensha[$_] } (0 .. $#jitensha))[0]];
�Ƚ���ޤ�����������ʤ�Ǥ⤳��Ϥ�ꤹ�����Ǥ����������ɸ��⥸�塼���List::Util��first
��Ȥ��С�
$pattern = $analyzeval[ first { $jitensha[$_] } (0 .. $#jitensha) ];
�ȡ���̣Ū�ˤ⥹�å��ꤷ�ޤ�������ˡ�H.I�����comment�ɤ���
$pattern = $analyzeval[ firstidx { $_ } @jitensha ];
�Ȥ���Ф���˥��å��ꡣ�Ǥ���firstidx
����������Ƥ���List::MoreUtils��ɸ�������ǤϤʤ��ΤǤ��͡�CPAN�����äƤ���ɬ�פ�����ޤ���
ɸ��⥸�塼����󶡤���Ƥ�������å���Ȥ����Ȥ������Ȥϡ�DCONWAY������
Use the "non-builtin builtins"
�֥ӥ�ȥ���Ǥʤ��ӥ�ȥ���״ؿ���Ȥ�
�Ȥ��ä���äƤ��ޤ������׷���������ꥹ����κǽ�����ǡפȤ����Τϡ��ޤ���List::Util::first()
�λŻ��ǡ�����ˤ������ߤ����Τϡ��׷���������ꥹ����κǽ�����ǤΥ���ǥå����פʤΤ�List::Util::firstidx()
���ɥ�ԥ����Ǥ���
�����ޤǤ�ޤȤ��Ȱʲ��Τ褦�ˤʤ�ޤ���
use List::Util qw/first/; while (my $log = $logs->readline()) { my $ua = $log->{ua} or next; my ($jitensha) = ($ua =~ $reg) or next; ����$pattern = $analyzeval[ first { $jitensha[$_] } (0 .. $#jitensha) ]; �� # or # use List::Util qw/firstidx/; # my $pattern = $analyzeval[ firstidx { $_ } @jitensha ]; # Do hoge hoge for $pattern }
���ʤߤˡ�
����������: �°פʥ롼�פϿ���٤��Ǥ���while (my $log = $logs->readline()) { foreach my $reg (keys %analyze) { if (($log->{ua}) && ($log->{ua} =~ /$reg/)) { my $pattern = $analyze{$reg}; # Do hoge hoge for $pattern goto OUT; } OUT: } }
��������goto OUT
��C�ǤϤȤˤ���perl�ǤϻȤäƤϤ����ʤ������פ�goto��last
�ΰ���Ǥ����ΤǤ����顣
Dan the Loop Controller
���äȤäȡ������Ǥ������Ȥ����櫓�ǡ������򹹿���
Dan the Man with Too Many Modules to Browse