Perl Best Practices [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Best Practices [Electronic resources] - نسخه متنی

Damian Conway

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید







6.11. List Selections


Use grep and first instead of for when searching for values in a list .


The same principles apply when you want to refine a list by removing unwanted elements. Instead of a for loop:



# Identify candidates who are unfit for the cut-and-thrust of politics...

my @disqualified_candidates;
for my $name (@candidates) {
if (cannot_tell_a_lie($name)) {
push @disqualified_candidates, $name;
}
}

just use a grep:



# Identify candidates who are unfit for the cut-and-thrust of politics...

my @disqualified_candidates
= grep {cannot_tell_a_lie($_)} @candidates;

Likewise, don't use a for when you're searching a list for a particular element:



# Victimize someone at random...

my $scapegoat = $disqualified_candidates[rand @disqualified_candidates];
# Unless there's a juicier story...
SEARCH:
for my $name (@disqualified_candidates) {
if (chopped_down_cherry_tree($name)) {
$scapegoat = $name;
last SEARCH;
}
}
# Publish and be-damn...
print {$headline} "Disgraced $scapegoat Disqualified From Election!!!\n";

Using the first function often results in code that is both more comprehensible and more efficient:


use List::Util qw( first );

# Find a juicy story...

my $scapegoat
= first { chopped_down_cherry_tree($_) } @disqualified_candidates;
# Otherwise victimize someone at random...

if (!defined $scapegoat) {
$scapegoat = $disqualified_candidates[rand @disqualified_candidates];
}
# Publish and be-damn...

print {$headline} "Disgraced $scapegoat Disqualified From Election!!!\n";


/ 317