Правда, дети, я хорош, на большой мешок похож?

Jan 05, 2006 14:04

Программистское, страшное и смешное

О Шароне мне написать как-то нечего, а вот о работе -- есть чего, жаль, мало кто поймет.



...
my %other_hand = (left => 'right',
right => 'left');
my %tape = (left => $rlStack->[-1],
right => $input[0]);

my $failed;
map(
{
if ($tape{$_}->isa('ABCDTokenDATE'))
{
$rhState->{TmpData}->{$other_hand{$_}}->{year} = $tape{$_}->year;
$rhState->{TmpData}->{$_}->{date} = $tape{$_};
}
elsif ($tape{$_}->isa('ABCSymbolRangeNumeric')
&& $tape{$_}->type == $ABCSymbolRangeNumeric::type_integer)
{
$rhState->{TmpData}->{$_}->{day} = $tape{$_}->left->value;
$rhState->{TmpData}->{$_}->{month} => $tape{$_}->right->value;
}
else
{
$failed = 1;
}
} qw(left right));

return 1 if (!$failed &&
#if at least one date
(grep(exists($rhState->{TmpData}->{$_}->{date}), keys(%other_hand))
#or two numeric ranges
|| !grep(!exists($rhState->{TmpData}->{$_}->{month}), keys(%other_hand)));

Стало так:

my $success = 0;
map(
{
if ($tape{$_}->isa('ABCDTokenDATE'))
{
$rhState->{TmpData}->{$other_hand{$_}}->{year} = $tape{$_}->year;
$rhState->{TmpData}->{$_}->{date} = $tape{$_};
$success++;
}
elsif ($tape{$_}->isa('ABCSymbolRangeNumeric')
&& $tape{$_}->type == $ABCSymbolRangeNumeric::type_integer)
{
$rhState->{TmpData}->{$_}->{day} = $tape{$_}->left->value;
$rhState->{TmpData}->{$_}->{month} => $tape{$_}->right->value;
$success += .5;
}
} qw(left right));

return $success > .5;

devel, кси

Previous post Next post
Up