¾�ˤ�Ĥä��ߤɤ����Ϥ���ΤǤ�������ϡ�loop control��Ū��ʤäơ�

[H.I����Υ����Ȥ������ɮ��������]

�ޤ��ϡ�DCONWAY�����ΰ�����顣Loop�˴ؤ��벫��§�Ǥ���Perl�ʳ��Ǥ�ͭ����

Reject As many iterations as possible, as early as possible. �����֤����ӽ����衢�����ʤ�٤��ᤤ�ʳ���

�ʲ�������������

jnaoya�ΤϤƤ����� - ź�綠��2
while (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