Perl入学式 in 東京 第3回 〜配列/ハッシュ編〜 の練習問題&復習問題の解答例
Perl入学式 in 東京 第3回 〜配列/ハッシュ編〜
昨日、「Perl入学式 in 東京 第3回 〜配列/ハッシュ編〜」の後半の講師を担当したものです。 みなさま本当にお疲れさまでした。
練習問題、復習問題の解答例
講義資料中にある練習問題、復習問題の解答例です。 うまく解けない時とかに参考にしてください。 うまく動かない時はご連絡ください。
練習問題
Perl入学式 2018 第3回 練習問題 array_pop_shift.pl — Bitbucket
Perl入学式 2018 第3回 練習問題 array_push_unshift.pl — Bitbucket
Perl入学式 2018 第3回 練習問題 hash_profile.pl — Bitbucket
Perl入学式 2018 第3回 練習問題 hash_func.pl — Bitbucket
Perl入学式 2018 第3回 練習問題 array_ref.pl — Bitbucket
Perl入学式 2018 第3回 練習問題 hash_ref.pl — Bitbucket
最終問題
Perl入学式 2018 第3回 最終問題 region_ref.pl — Bitbucket
復習問題
Perl入学式 2018 第3回 復習問題 vote.pl — Bitbucket
Perl入学式 2018 第3回 復習問題 score.pl 2-1 — Bitbucket
Perl入学式 2018 第3回 復習問題 score.pl 2-2 — Bitbucket
Perl入学式 2018 第3回 復習問題 score.pl 2-3 — Bitbucket
Perl入学式 2018 第3回 復習問題 score.pl 2-4 — Bitbucket
Perl入学式 2018 第3回 復習問題 score.pl 2-5 — Bitbucket
リファレンス、さっぱりわからないというあなた
第3回の後半っていうと、Perlのデータ構造、リファレンスについてやるんですが、まぁー、初学者殺しですよねー
うちもそうでした。やられた口です。リファレンスわかりませんでした。
でも大丈夫です。わからなくてもプログラムは書けます。
うちがPerl入学式受講生だった2013年、講師をしていたpapixさんが
「リファレンスは、繰り返し何回もやって体で覚えるしかない!」
と言っていて、プログラミングでそんな脳筋理論が出てくるとは・・・って思ったもんですが、今ならわかります。
リファレンスは脳筋です。
繰り返し何回もやって体で覚えるしかない
リファレンスの数をこなす・・・?
でも問題集の設問は限られているし・・・?
大丈夫です。講師をしている途中でも言いましたが、自分の身の回りにある情報をPerlのデータ構造にしてみるのが良いです。
- 都道府県名をkeyに、県庁所在地をvalueにしたハッシュを、北から順に配列に入れてみたらどのような構造になるか?
- 都道府県名をkeyに、その県で見られる民放のテレビ局(おそらく複数?)をvalueに入れ、北から順に配列に入れてみたらどのような構造になるか?
- 将棋の棋譜をデータ構造で再現するには?
- 年度別に、各月の給料支給額を格納するには?そして格納した給与支給額を年度別に合計したり平均値を出すには?
- 株価の時系列データから、特定の日時だけ抜き出すのに楽そうなデータ構造は?
などなど。
そして、自分が作ったデータ構造からデータを引き出せなかったり、そもそも、どのようなデータ構造にすれば良いかわからない・・・というときは、どうぞPerl入学式のslackやtwitterのハッシュタグ #Perl入学式 でつぶやいてみると、教えてくれる人が現れるはずです。多分。
適切な参考書はありますか?
これに関しては自信を持って深澤千尋さんの「すぐわかる オブジェクト指向Perl」をおすすめします。
タイトルにはリファレンスの文字もないのですが、Perlのオブジェクト指向を学ぶためにはリファレンスが必要、そのためにリファレンスについて勉強しましょう!と始まって、書籍全体の半分くらいのページを割いて懇切丁寧にリファレンスを解説してます。
うちだけではなく、他の方もオススメしている本です。ぜひ参考にしてください。
あと、ごくごくわずかな一部の方に好評だった、いらすとやさんを利用したスライドを載せておきます。成仏してくれ・・・
でも楽しかったんで、また作るかも!
Perl入学式 in 東京 第2回 〜構文基礎編〜 の練習問題&復習問題の解答例
Perl入学式 in 東京 第2回 〜構文基礎編〜
え、前に記事書いてからもう2ヶ月近く経ってたの・・・
昨日、「Perl入学式 in 東京 第2回 〜構文基礎編〜」の前半の講師を担当したものです。 みなさまお疲れさまでした。
本日の画伯はわたくしでございまする #Perl入学式 pic.twitter.com/Nx3N2OgfbT
— sironekotoro (@sironekotoro) 2018年5月26日
練習問題、復習問題の解答例
講義資料中にある練習問題、復習問題の解答例です。 うまく解けない時とかに参考にしてください。 うまく動かない時はご連絡ください。
練習問題
Perl入学式 2018 第2回 復習問題 hello_perl.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 scalar_practice.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 hello_stdin.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 calc.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 question_word.pl — Bitbucket
Perl入学式2018年 第2回 練習問題 question_num.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 for.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 fizzbuzz.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 join.pl — Bitbucket
Perl入学式 2018 第2回 練習問題 split.pl — Bitbucket
復習問題
Perl入学式 2018 第2回 復習問題 stdin.pl — Bitbucket
Perl入学式 2018 第2回 復習問題 sum.pl — Bitbucket
Perl入学式 2018 第2回 復習問題 factorial.pl — Bitbucket
Perl入学式 2018 第2回 復習問題 even_or_odd.pl — Bitbucket
ピザ会で紹介したスライド
最高なのでみんな見て!
次回のPerl入学式 in 東京
「魔の第3回」と言われ、Perlでの最初の山場である「リファレンス」をやります。
まぁ、逆にいうと、これ越えるとしばらく山場ないんじゃないかなって感じです。
それに、リファレンスわからなくても死にはしない。プログラムが組めないわけではない(面倒だけど)という程度のことです。
たくさん試行錯誤して、たくさん書いてやっていきましょう。
YAPC::Okinawa 2018 ONNASON
行ってきました。初沖縄上陸。
3月1日に到着。1日と2日昼は観光して、2日の夕方からの前夜祭に参加しました。
前夜祭
綺麗なコードの書き方
YAPC前夜祭で「綺麗なコードの書き方」のLTしました。(綺麗なコード= 実行可能な綺麗な画像)
— ぺんさん! (@tompng) 2018年3月2日
そのリポジトリですhttps://t.co/64ejvGE76R #yapcjapan
!?ってなったのはこれ。
情報処理試験の問題集に出ていたステガノグラフィーってやつ?いや、あれは単に画像の中に情報を隠してるだけだから・・・ではこれは一体?画像ファイル(ビットマップ)をそのままperlで実行!?できるんだ・・・
しかし、妖しそうなLTだったら駆けつけて正面に陣取る弾さんの嗅覚よな・・・ #yapcjapan
— sironekotoro (@sironekotoro) 2018年3月2日
素早かったです。
Perlと私
ちょっとー、めっちゃPerl入学式、めっちゃ役に立ってるよすごいー! #yapcjapan
— sironekotoro (@sironekotoro) 2018年3月2日
信大の学生さん。「Perl入学式」の資料を見て自習してくれるとか、すごい嬉しいじゃないですか。
YAPC::Okinawa 2018 ONNASON 当日
今回の会場は「沖縄科学技術大学院大学 OIST」。ホールがめちゃめちゃ広く、またWiFiも途切れることなく、快適に過ごすことが出来ました。
OIST着いた!ホール広い!映画館みたい #yapcjapan pic.twitter.com/5ubAZYkCj4
— sironekotoro (@sironekotoro) 2018年3月3日
なお、外は猛烈な雨。
様子です #yapcjapan #yapcjapanB pic.twitter.com/Wt6RsmcnkS
— sironekotoro (@sironekotoro) 2018年3月3日
Webサービスを監視するときに僕達が考えたこと
B会場ながら、ベストトーク2位に食い込んだpapix師すごい。
うちの今のお仕事は異常値検出後フローにおける終端・・・異常値が出ていることをお客さんに「口頭で」伝えるお仕事なのですが、その手前で何をすべきか、何を考えておくべきか、何を揃えておくべきか、といったことが語られていて、良かったです。
YAPC::Okinawa 曖昧な文脈自由文法となんか理論的な話
正規表現技術入門 ――最新エンジン実装と理論的背景:書籍案内|技術評論社
初心者にもやさしい語り口調で、さすが教職だなぁと思いつつ。
懇親会でもお伝えしたのですが、中学高校くらいの数学が、大学レベルになると垣根を越えて文章の構造の解析に当てはめて利用されるというのがとても驚きで、新鮮で、本当に良かったです。
今回のテーマとおり、うちの頭の中で架け橋がかかったなぁという感じでした。
WordPress運用を支えるPerl
事前に
「今回はWordPressをPerlで活用する話をするんですよー」
と聞いていて、あー、WordPressが吐き出したログとかアドオンとか、移行用に吐き出したエントリをPerlでごにょごにょやる話かなー・・・と思ったら全然違って、こういう話だった。
最高 #yapcjapan pic.twitter.com/7bIGcYWGej
— sironekotoro (@sironekotoro) 2018年3月3日
思えば、nginxやPHP,Rubyなどが出てきているけど、ApacheもPerlも滅んでいないわけで、そうなると、mod_perlまだまだ活用の場十分広いのでは?と思うなどしました。
あと、発表ではプロジェクタにiPadを接続、それでプレゼンというスタイル。iPadで指をグリグリすると、映し出されたスクリーン上でレーザーポインタ的なマーカーが動くというもので、これは新しい。
そういえば、社内イントラサイトで一番アクセス数があるのは「社員懲戒」のページ、という話を思い出しました。
ノンプログラマーのプログラミング活用法
YAPC::Asia 2013 のPerl入学式出張版に出ていたということで、あぁ、同級生だったんか・・・と思いつつ。
「編集」という文章を扱う仕事でVim、Perlを使ってみたら・・・という内容。
プログラマの三大美徳ってのがあるんですが、まさにツールを使い尽くして意のままに動かし、楽をする「怠惰」の極み。
うちはツールに使われていて、まだまだ「勤勉」だなぁ、いかん、と反省しきり。
Perlを中心としたワンライナーあれこれ
「UNIXという考え方」電子化して持ち歩いてるけど、物理本の時に一度読んだきりだわ・・・ #yapcjapan #yapcjapanB
— sironekotoro (@sironekotoro) 2018年3月3日
うちの作ってるモジュール、ワンライナーの中に組み込めるだろうか・・・UNIX哲学に合致してないのでは、という気づき #yapcjapan #yapcjapanB
— sironekotoro (@sironekotoro) 2018年3月3日
Perlといえばワンライナーも魅力なんですが、その基礎には「UNIX哲学」があるという話。「UNIXという考え方」は東京戻ってきて、通勤途中に再読はじめました。
LT
4発目のLTは @uniuni_sea76 さんで「Perl入学式in沖縄に参加して」です! #yapcjapan
— yapcjapan (@yapcjapan) 2018年3月3日
アナグラ君が公開処刑されてたんで、懇親会で
「うちの会社きなよー、女性比率高いから機会は多いよ。
ただし今学んでいる専門やプログラミングは一切生かせない。
この門をくぐる者は一切の希望を捨てよ」
みたいなことを雑に伝えたりしました。
後から思ったんですが、社内恋愛、うまくいってる間は最高なんですが、ミスると仕事と周囲の人間巻き込んで死ぬのでオススメしてはいけなかった・・・
おっさんとなった今は「そんなに彼女欲しいもんかねー」などと思うけど、じゃあ自分が20代の時はどうだったかっていうと、血涙その他の体液たれ流しながら彼女ほしいとか思ってたので、いっぱい失敗して年取るとどうでもよくなって楽です。早く年取れ!(雑
懇親会ではオリオンビール飲めて、寿司もたべて、豚足も食べて、素敵な感じで過ごせて幸せでした。
本当にスタッフ、そしてスポンサーのみなさんありがとうございました。
次回は東京!
今から楽しみ〜
詳解! GoogleAppsScript完全入門 で詰まったところ
Perl入学式 in 東京のピザ会でみた@xtetsujiさんの超絶ライフログシステムや、家電価格の定点観測を Google スプレッドシートで行うなんかを見て、俺もいっちょやってみたい!と思って購入したのがこの本
詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~
- 作者: 高橋宣成
- 出版社/メーカー: 秀和システム
- 発売日: 2017/12/23
- メディア: 単行本
- この商品を含むブログを見る
土日ごとにやっていたこの本も終盤。なんというか、いままで「ホスティング借りて、スクリプト置いて、cronで動かさんとなぁ・・・」って思ってたことが、GASだけで完結でそうで、Google様すげぇ・・・ってなってます。
で、そんな中で詰まったところがあったので、おすそ分け。
17章 外部サイトへのアクセス サンプル 17−3−3 「お天気Webサービス」から天気情報を取得する , 第1版 423pのスクリプトです。
function myFunction() { var cityId = 130010; var url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city='; var response = UrlFetchApp.fetch(url + cityId); var json = JSON.parse(response.getContentText()); Logger.log('%sエリア -%s-%s 地方の天気:', json.location.area, json.location.prefecture, json.location.city ); Logger.log(json.description.text); json.forecasts.forEach(function(forecast,i,array){ Logger.log( '%s %s の天気 : %s / 最高気温 :%s', forecast.dateLabel, forecast.date, forecast.telop, forecast.temperature.max.celsius # ここ ); }); }
これは、GASからlivedooreの天気用法APIを叩き、返って来たJSONをパースしてログに出す、というもの。ここでエラーが出たのは最後の方にある行、 forecast.temperature.max.celsius
現在は2018年2月25日15時過ぎですが、実行すると以下のエラーが出ます。
TypeError: null からプロパティ「celsius」を読み取れません。(行 15、ファイル「WebAPI活用」)
で、生JSONとか見たんですが、ちゃんとオブジェクトあるし、綴りも間違ってないし・・・と悩んだのでした。
しかし、よくよく見てみると・・・画像の一番下です。
あ、forecastに格納されている配列の3つ目、添え字でいうと[2]のtemperature.max
がnull
だ!ってことに気づいたのでした。おそらく、時間が進むとここに値が入ったりするのかなぁ、と思ってます(未確認)
ということで、雑にif文で回避したりするなどして先に進んだのでした。後半のforEach直後にif文で抜けるようにかいてます。
json.forecasts.forEach(function(forecast,i,array){ if (!forecast.temperature.max){return} Logger.log( '%s %s の天気 : %s / 最高気温 :%s', forecast.dateLabel, forecast.date, forecast.telop, forecast.temperature.max.celsius ); });
この本も残りわずか、頑張りまする
ハッシュリファレンス使うほどのデータ構造なんて作る事も使う事も無いよなーと思っていたけど、欲しいデータはいつだって複雑なデータ構造の中にあった
この記事はPerl入学式 Advent Calendar 2017 19日目の記事です。
こんにちは。アドベントカレンダーの空欄は埋めていきたい欲のsironekotoroです。
Perl入学式 in 東京では、講義終了後、希望者が集ってピザを食べながら雑談をする時間を設けています。
昨日(2018/02/03)、そこで興が乗って発表したスクリプトを2つほど紹介します。
テーマは、ハッシュリファレンス使うほどのデータ構造なんて作る事も使う事も無いよなーと思っていたけど、欲しいデータはいつだって複雑なデータ構造の中にあった、です。
名状し難い欲望に名前があるかも知れない
Webページから任意の情報を取得する際に使うのがスクレイピングツールです。
が、そのまえに昔話。
かつて「Webページから欲しい情報だけ抜き出すような、都合のいい技術ないかなー」と思っていました。
当時はそれを実現できる技術の名前を知らず、また聞ける人がいなかったので、検索しようがありませんでした。やりたいことに名前がついていることに気づけば、そこからの実現速度は驚異的に上がります。
自分が知らないことも、他の人なら知っているかもしれません。ってことで、Perl入学式ではサポーターに色々と質問してくださいね。
欲しい情報だけ取得したけど、その情報はハッシュリファレンスの中にいる
Perlでスクレイピングツールというと、Web::Scraper
を使うのが良いです。Perlを知れば知るほど、応用範囲が深く大きく広がる素晴らしいツールです。ここでは単純な例を示します・・・しかし!
取得した情報はハッシュリファレンスの中に格納されています!なんてこった!22行目にある$res
に格納されているのは、スクレイピング結果を格納したハッシュリファレンスです。
my $res = $scraper->scrape($url);
37行目ではこの$res に格納されている配列リファレンス(記事一覧)情報を、Perl入学式第3回でやった「デリファレンス」で配列に戻してしています。
my @news_titles = @{ $res->{news_titles} };
このハッシュリファレンスの中に入っているスクレイピング結果が、単なる値(スカラー)なのか、配列リファレンスなのか、そこを意識して情報を扱っていきます。
つまり、Perl入学式 第三回を復習して理解すればハッシュリファレンスからデータを引き出すのも怖く無い!スクレイピングで欲しい情報がウホウホ!ということですね。
use strict; use warnings; use Web::Scraper; use Encode; use URI; # URIモジュールで$uriに取得先のwebページのアドレスを格納。 my $url = URI->new('https://news.yahoo.co.jp/'); # webページの欲しい情報があるところをXPathで指定する。 # process 'XPath式', 'key名' => '取得形式(HTMLかTEXTか、など)' # process 'XPath式', 'key名[]' => '取得形式(HTMLかTEXTか、など)' # key名の後に[]をつけると、XPathで指定した要素を配列リファレンスとして取得する my $scraper = scraper { process '//title', 'title' => 'TEXT'; process '//div[@id="epTabTop"]//h1[@class="ttl"] | //p[@class="ttl"]', 'news_titles[]' => 'TEXT'; }; # 上記で設定された情報に従い、対象のページから情報を「スクレイピング」する。 # スクレイピングした結果はハッシュリファレンス$resに格納される。 my $res = $scraper->scrape($url); # $resから情報を引き上げる。 # $res->{key名}でアクセスする。 my $title = $res->{title}; # Yahoo!ニュース # 取得した情報をMacで表示する。 # Windowsで表示する場合には以下に変更する。 # print encode('cp932' , $title), "\n"; print encode_utf8($title), "\n"; print "----------\n"; #区切り線 # ページのニュースタイトルを表示する # news_title は配列リファレンスなので、デリファレンスして配列に戻す my @news_titles = @{ $res->{news_titles} }; # 配列の要素をfor文で表示していく foreach my $news_title (@news_titles) { print encode_utf8($news_title), "\n"; }
Web::Scraper
についてはこのページが初心者向け。こちらのページの例ではAmazonのページからデータを取ってきてます。
use Web::Scraper; - 今日のCPANモジュール(跡地)
うまく動かなかったら、Web::Scraper
がインストールされていないかも。となると、cpanm Web::Scraper
をターミナルで実行して・・・え?cpanm入ってない?木本先生にお任せ!
cpanmによるPerlのローカル環境構築 - Perlゼミ(サンプルコードPerl入門)
WebAPIから帰ってくる情報は大体JSONで、それはやっぱり複雑なデータ
WebAPIというのは、HTMLのように人間が見やすい形ではなく、構造的なデータとして提供されている情報です。Amazonの商品情報APIなどが有名ですね。
人間に厳しいデータ表示形式の何が嬉しいか?というとプログラムが解釈しやすい形になっているのが嬉しいわけです。プログラムが解釈して、人間が欲しい情報だけを利用することができるわけです。
今回は、認証不要のAPIであるライブドア社の気象情報APIを利用してみます。
このAPIから返されるデータをPerlで取得し、千代田区の天気を表示してみます。
かつてはAPIが返すデータにも様々な種類がありましたが、現在は大体JSONという形式で提供することが多いようです。以下のリンクにブラウザからアクセスしてみてください。
http://weather.livedoor.com/forecast/webservice/json/v1?city=130010
もしかしたらブラウザが整形してくれたかもしれません。この、人間が見るにはちょっと厳しいデータをPerlの力を借りて構造化し、そこから今日の日付と天気、明日の日付と明日の天気予報を取得してみます。
18行目で取得したjsonのデータをperlのデータ構造にしています。
my $perlish_data = decode_json($json_data);
そして、例えば35行目のように、ハッシュリファレンス$perlish_data
から情報をスカラー変数$tomorrow_weather
に格納しています。
# ハッシュリファレンス内にある明日の天気 my $tomorrow_weather = $perlish_data->{forecasts}->[1]->{telop};
なお、プログラムの末尾にprint Dumper $perlish_data;
をコメントアウトして置いておきます。このコメントをとることで、データがどのような構造になっているかを把握することが可能です。
use strict; use warnings; use LWP::Simple qw/get/; use JSON; use Encode; use Data::Dumper; # ライブドア社の天気情報APIのURL; # 末尾の番号は千代田区を指す my $url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010'; # get関数でページにアクセスし、応答結果を$json_dataに格納する。 my $json_data = get($url); # json_のデータをPerlのデータ形式に変換する。 # 変換結果はハッシュリファレンスになっている。 my $perlish_data = decode_json($json_data); # ハッシュリファレンス内にある取得時の日付 my $today_date = $perlish_data->{forecasts}->[0]->{date}; # ハッシュリファレンス内にある取得時の天気 my $today_weather = $perlish_data->{forecasts}->[0]->{telop}; # ハッシュリファレンス内にある明日の日付 my $tomorrow_date = $perlish_data->{forecasts}->[1]->{date}; # ハッシュリファレンス内にある明日の天気 my $tomorrow_weather = $perlish_data->{forecasts}->[1]->{telop}; # 取得時の日付を表示 print $today_date, "\n"; # Macで表示する場合。Windowsの場合には # print encode('utf8',$today_weather), "\n"; print encode_utf8($today_weather), "\n"; print "----------\n"; #区切り線 # 取得時の日付を表示 print $tomorrow_date, "\n"; # Macで表示する場合。Windowsの場合には # print encode('utf8',$tomorrow_weather), "\n"; print encode_utf8($tomorrow_weather), "\n"; # ハッシュリファレンス内のハッシュリファレンスの配列リファレンスのハッシュの・・・とデータをたどっていく。 # わからなくなったら # print Dumper $perlish_data;
複雑なデータ構造はDumperで覗き見!
というわけで、世の中の有用なデータは大概複雑な構造の中にあることが多いです(個人の感想
そして、そういう複雑なデータで訳がわからなくなったら、Dumperで覗き見するのが一番です。
Webやいろんなデータ構造から欲しいデータを見つけ、うまいこと利用していきましょう!
Perl入学式で講師やりながら思った、過去の自分にしつこく教えてあげたかった事
この記事はPerl入学式 Advent Calendar 2017 17日目の記事です。
昨日(2018/02/03)に開催した「Perl入学式 in 東京 第3回」で配列操作とハッシュ変数、ハッシュの操作についての講師を担当しました。
教えることで学びを得られる、と言うのは本当のことで、理解の浅い部分があるなぁ、と思うことしきりです。
また、かつて自分が初学者だった時に早めに気づくことができれば・・・!ってことを思い出したりしました。今日はその、かつての「Perlの配列とかハッシュとかよう分からん」と言っていた自分向けのエントリです。
要約すると、配列もハッシュも、ようは一つの値の集まりなんよ!お前が表示したり変更したり追加したかったのは一つの値なんだから$
つかえ!、ということをしつこく書いただけのエントリです。
$
で始まるスカラー変数
Perlには一つの値しか代入できないスカラー変数があります。Perl入学式でいうと第2回の内容です。
use strict; use warnings; my $scalar = '123456'; print $scalar , "\n"; # 123456、改行
この $scalar
がスカラー変数です。
@
で始まる配列変数だけど、個々の要素を指定する時は$
なんだぜ
そして配列です。
@array
が配列変数です。配列には複数の値を格納することができます。
配列変数@array
の先頭の値を表示してみます。
use strict; use warnings; my @array = ( 1, 2, 3, 4, 5, 6 ); print $array[0] , "\n" # 1、改行
配列@array
の先頭にある値を直接print
関数で表示しています。print
関数の右側に注目すると、変数先頭の記号が @
から$
に変更されています。また、末尾に[0]
が付け加えられています。
これは、配列内の一つの値を指し示す時の表記です。
配列の中の値を一つ指定するときは、スカラー変数を指定する時と同じように先頭の記号が$
になります。そして配列の中の何番目に格納されている値なのか?を末尾にある[0]
で指定しています。この[0]
は「添え字」と呼ばれます。
強調したいのは、一つの値を表示する、値を削除するなり変更するなり、とにかく一つの値を指し示す時は元の変数がなんであれ、先頭の記号が$
になる、ということです。
%
で始まるハッシュ変数だって、個々のkeyに結びついた情報取ってくる時は$
なんだぜ
ハッシュ変数から値を一つ指定するときも同様です。
%hash
がハッシュ変数です。ハッシュには複数の値を格納することができますが、配列とは異なり、key => value
というペアで値を格納します。
use strict; use warnings; my %hash = ( name => 'sironekotoro', tweet_count => 202540, ); print $hash{name} , "\n"; # sironekotoro、改行 print $hash{tweet_count} , "\n";# 202540、改行
ここでもハッシュの中の値を一つ表示する時、変数先頭の記号が%
から$
に変化しています。配列の値にアクセスする時と同じです。
そして、ハッシュ内のどのkey
に結びついたvalue
が欲しいのかを指し示すために、末尾に中かっこで括った{key}
を加えます。
ここでも配列から一つの値を操作する時と同様、対象は一つの値なので、$
を使います。
つまり・・・?
配列もハッシュも、一つの値の集まりなんよ!
お前が表示したり変更したり追加したかったのは一つの値なんだから$
つかえ!
って事を、自分に教えてあげたら、も少し早く理解できたかなぁと思ったのでした。
Perl入学式を卒業したらこの本を読むと良いんじゃないかなの5冊
こんちゃす。sironekotoroです。
このエントリは Perl入学式 Advent Calendar 2017 - Qiita 9日目のエントリが空いてたので、こそっと入れました。
さっき12月10日のアドベントカレンダー見たら
perlを学ぶと彼女ができると教えてくれたので受講しました。
まじか沖縄行く
ではなく、
とあり、そういえば、サポーターとしてお手伝いしてたPerl入学式 東京2017(上期)でも同じような質問があったなぁ、ということで、ここに個人的なオススメ本を紹介します。
重要開示
- 私はオライリーの「初めてのPerl」に挫折してます(3回くらい)
- 第5版を本で書い、挫折し、そのあと他の本で修行を積み、電子版で第6版を書って読破(というのか?)しました
- 以下で紹介するのは「はじめてのPerl」を読む前の本、と言えるかもしれない
Perl入学式を卒業したらこの本を読むと良いんじゃないかなの5冊
かんたん Perl
gihyo.jp
Perl入学式で聞き流してしまったことがある、わからないことがあったが聞けなかった、入学式の範囲をもっと詳しく勉強したい、知りたい、という人にオススメしたい本。
Perl入学式で学ぶ範囲の復習に最適です。
サンプルプログラムも豊富で、エラーについての解説もとても丁寧です。挫折ポイントを先回りして潰してくれる感があります。
Perl本の出版は少なくなっている中、2016年出版とかなり新しいのもポイント高いです。
すぐわかる オブジェクト指向 Perl
gihyo.jp
Perl入学式で基礎は押さえた、Perl入学式の範囲からさらに一歩進めた学習がしたい!って人にオススメ。
Perlにおけるリファレンスがわからない、という方には絶対の自信を持ってオススメします。うちはこの本のおかげでリファレンスを理解できました。
この本の半分くらいはリファレンスについて、本当に丁寧に丁寧に説明してます。
あと、この本ではソースコードを編集した時、「どこを編集したか」がわかりやすいです。
Perlに限らず、他の本では編集した部分だけが掲載されて、それがコードのどこなのか?で迷うことがあるのですが、この本では比較的そういうことが少なくて、とても学習しやすい本です。
また、「オブジェクト指向」というと、JavaやC++の知識前提で語る本が多いなか、この本はそのような前提知識なしにオブジェクト指向について学ぶことができます。
これはPerlが第一言語の自分にとって、本当にとても有難いことでした。
Perl CPANモジュールガイド
www.wgn.co.jp
Perl入学式で簡単なスクリプトは組むことができた、でも実際にプログラムで何をすれば良いのかわからない・・・という人にはこれ。
様々なPerlのモジュールとその簡単な使い方を紹介している本です。
この本を読んでいると、「あれも出来るのでは?これも出来そうでは?」とアイデアや欲望(大事)が湧いてくる本です。
2011年の本なので、当然、2017年現在のサービス(例えばLINE)についてのモジュールは載っていないのですが、「このモジュールがあったんだから、他のサービスのモジュールあるだろ」って探すとあっさり見つかったりします。そういうキッカケをくれる本です。
なお、LINEとPerlについてはこちらをどうぞ
第44回 LINE Messaging APIで作るchatbot―LINE::Bot::APIとngrokでお手軽に!(1):Perl Hackers Hub|gihyo.jp … 技術評論社
もっと自在にサーバを使い倒す 業務に役立つPerl
gihyo.jp
Perlを学びつつ、では実際にどうやって使っていくのか?を解説している本です。
題名に偽りなしで、これを読むことで「あの仕事、Perl使うことで楽できそう」という欲望(超大事)がフツフツと湧いてくる本です。
特に、吐き出されたログをExcelで編集して集計、みたいな仕事をやっている人に読んでいただけると、「Perlしゅごい・・・」ってなること請け合いです(4年くらい前の自分)
Perlについて語ろう
- 作者: 和田裕介
- 出版社/メーカー: 和田裕介
- 発売日: 2013/03/13
- メディア: Kindle版
- 購入: 3人 クリック: 61回
- この商品を含むブログ (9件) を見る
タイトルからするとエッセイ?と思うんですが、さにあらず。スカラー変数、配列、ハッシュ、リファレンス・・・つまりPerl入学式の範囲から始まり、mojoliciousというフレームワークでWebサイトを作るところまでをソースの解説を交えつつ書いています。 他の本に比べて基本的な解説は少ないですが、Perl入学式で学んだ内容を踏まえ、もう少しで手が届くかも・・・?という感じのレベルになってます。
ということで
ちょうどアドベントカレンダーも空いてしまったので、自分が買って読んでよかったなぁ、という本をあげてみました。
大きな本屋も少なくなってきている昨今、なかなかPerl本を書店で見ることないかもしれないのです。
そういう時は、大きな図書館を探してみると良いです。
(あとブックオフ)
かつて、技術書はちょっと高い?とも思っていたんですが、
「この機能がわかるなら、この部分が動いてくれるなら魂売っても良い!」
とか思うようになってくると、3000円くらいで教えてくれるの本当に安いなって思います。
以上、Perl入学式を卒業したらこの本を読むと良いんじゃないかの5冊でした。