Perl入学式 YAPC::2013 の復習 その2
workshop-YAPC-Asia/slide.md at master · perl-entrance-org/workshop-YAPC-Asia · GitHub
引数をハッシュにして受け取る'GetOpt::Long'のところでしばし詰まる。スライドでは、existsを使ってkeyの有無を確認、となっている。
しかし、
use Data::Dumper; use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/; my %opt; Getopt::Long::GetOptions( "t|time=s" => \$opt{time}, "o|orderby=s" => \$opt{orderby}, ); print Dumper %opt; # $VAR1 = 'orderby'; # $VAR2 = undef; # $VAR3 = 'time'; # $VAR4 = undef;
この時点でハッシュにkeyが生成されており、値のほうがundefになっている。この場合はkeyの有無を確認するexistsではなく、値の有無を確認するdefinedではないだろうか・・・
use strict; use warnings; use Data::Dumper; use WebService::Simple; use Getopt::Long qw/:config posix_default no_ignore_case bundling auto_help/; #引数から複数のパラメータをゲットする my %opt; Getopt::Long::GetOptions( "t|time=s" => \$opt{time}, "o|orderby=s" => \$opt{orderby}, ); # 引数が空だった場合のデフォルト値を設定する if ( !defined $opt{time} ) { $opt{time} = 'all_time'; } if ( !defined $opt{orderby} ) { $opt{orderby} = 'relevance'; } my $service = WebService::Simple->new( base_url => 'http://gdata.youtube.com/feeds/api/videos', response_parser => 'JSON' ); # 複数のキーワードが設定されたときは+で連結する my $query = join "+", @ARGV; print $query; my $res = $service->get( { q => "$query", time => $opt{time}, alt => 'json' } ); my $ref = $res->parse_response(); # タイトル、URI、カテゴリを表示 for my $entry ( @{ $ref->{feed}->{entry} } ) { my $url = $entry->{link}->[0]->{href}; my $title = $entry->{'media$group'}->{'media$title'}->{'$t'}; my $category = $entry->{'media$group'}->{'media$category'}->[0]->{'label'}; print "$title\n $category\n $url\n"; }