Skip to content

Instantly share code, notes, and snippets.

@koba04
Created November 5, 2010 17:52
Show Gist options
  • Save koba04/664527 to your computer and use it in GitHub Desktop.
Save koba04/664527 to your computer and use it in GitHub Desktop.
Closure Sample (AKBを使って)
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
use Encode;
use List::Util qw/shuffle/;
# AKB 48 って48人ではない?
my @AKB48 = (1..47, '前田敦子'); # 数値でごめんなさい。
# CDを買うとメンバーの誰かに会えるとする。
# 関係者のコネもなし。(やらせで配列に直接アクセスすることは出来ない)
# 一度会ったメンバーは除外していくことが出来る。
my $cd = sub {
my @shuffled_akb = shuffle(@AKB48);
return sub {
return shift @shuffled_akb;
}
};
# 3人のファンが前田敦子に会いたいとする。
for my $fan_no (1..3 ) {
my $buy_cd = $cd->();
my $pay = 0;
my $member;
do {
$pay += 1000;
$member = $buy_cd->();
} while ($member ne '前田敦子');
print encode_utf8("前田敦子ファン${fan_no}は総額${pay}円支払いました。\n");
}
# 1回目
# 前田敦子ファン1は総額15000円支払いました。
# 前田敦子ファン2は総額32000円支払いました。
# 前田敦子ファン3は総額15000円支払いました。
# 2回目
# 前田敦子ファン1は総額29000円支払いました。
# 前田敦子ファン2は総額48000円支払いました。
# 前田敦子ファン3は総額3000円支払いました。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment