動作イメージアイテムリストリスト論理演算子と三項演算子TSV形式プログラム$items$words$conditions関連リンク最後に開発動機みなさんは、旅行の荷物とのおつき合いは順調でしょうか。荷造りの際に、何を持って行くべきかで毎度のように頭を悩ませていたりしませんか?私はどれもこれも当てはまるのですが、どちからといわずとも、忘れ物よりは荷物の重さや選定で困っていました。問題を自覚したのは、今年の夏のことです。青春18きっぷを10日分購入して、始発で出発し、旅先でも電車に乗り倒し、終電1本前で帰宅するというアクティビティに励んだのですが、「荷物はなるべく軽く小さく」というポリシーに反して、どんどん荷物が増えていく...旅慣れている方なら、青春18きっぷ、始発、終電1本前というキーワードだけでお察しかもしれませんが、実はこの旅、けっこうシビアだったのです。移動に片道6時間とか9時間とかはザラで、戻ってくるのにも同じくらいの時間がかかるのですが、旅先でちょっと大きめに予定が狂うと、楽しみにしていた目的地を回れなくなったり、家に帰れなくなったりするわけです。何度か肝の冷える思いをしているうちに、備えあれば憂い無し式にどんどん荷物が増えていき、ついには「リュックが重すぎて走っても前に進めなかったために電車を逃す」という珍しい体験をしました。その後は、無駄な荷物を減らすために、持って行くべきものとそうでないものの峻別に真剣に取り組むようになったのですが、これがとんでもなく時間を喰う苦行でした。旅の前提条件って毎回違うんですよね。要不要、ドレスコードの有無、などなどなど。12パターンですが、実際にはもっと細々した思い出しにくい事柄がいろいろと有り、条件はずっと複雑になります。旅に出れば何かしら価値観に影響を受けるので、同じような条件でも必要な荷物はどんどん変化していきます。この難題をどうにかするために、スプレッドシートの関数を駆使するなどして持ち物リストの作成やブラッシュアップにも励んでみましたが、結局、納得の行くリストは完成しませんでした。いうわけで、自分の頭で考えるのは諦めて、難題解決のための凄いプログラムを作ったのでした。技術的トピック「凄いプログラム」と聞くと身構えてしまう人のために、この記事やプログラムに登場する技術的トピックを挙げておきます。したら正解で、この記事はあなたのような方のために書かれました。だいたいのところは理解できる内容になっていますので、安心して読み進めてください。それでは、いざ、凄いプログラムの紹介へ。いうファイル名で置くコマンドラインでプログラムを起動する旅についての質問に次々に答えていくたったこれだけで、その旅に必要な荷物のリストが完成するという仕組みになっています。動作イメージ続いて、動作イメージです。データにリアリティがあるほうが凄さが伝わりやすいので、私秘伝のアイテムリストをサンプルとして使います。旅の設定もリアルに行きます。参加ついでにちょっと足を伸ばして趣味スポットを訪れるので、そのための持ち物リストを作ります。自然数を入力してください。以下の質問は、該当する場合のみ'y'と答えてください。yこんな感じで回答すると、即座に持ち物リストが出来上がります。少々長くなりますが、リスト全体を載せてしまいます。良い旅を!もう1パターンいってみます。これまたリアルな例で、前回の旅行です。登山かつ仕事かつ客先訪問という大量の荷物を必要とする3泊4日でした。自然数を入力してください。3以下の質問は、該当する場合のみ'y'と答えてください。実はサンプルのリストからは、公にしたくない趣味の品々などを除外してあるのですが、それでもけっこうなボリュームです。これらの一つ一つについて、都度自分の頭で要不要を判断していたころには、もう戻れそうにありません。この凄いプログラムは、はっきり言って、めちゃ便利です!アイテムリストリストさて、ここからは、技術的な話が増えてきます。プログラム本体の説明に入る前に、アイテムリストについて説明します。"単位"となっています。内容がただの数字ではないことにすぐ気づかれると思います。いくつかのデータについて、その意味を表にまとめます。スーツを着るなら革靴を1足持って行く。登山をするときに雨ならば1枚持って行く。三項演算子と同じ働きをしています。日本語の説明と見比べてみると、演算子を用いることで、簡潔で紛れのない表現に落とし込めていることが分かりますね。大げさに比較するなら、こんな感じでしょうか。「『じゃなかったら』はどこに掛かるのか。TSVという形式で保存します。TSV形式でダウンロードできます。選択することで、任意のシートをTSV形式で保存できます。いうのはタブ文字区切りのテキストデータのことです。似たようなものですが、下記のように違います。CSVデータをカンマで区切ったりクォートしたり、場合によってはエスケープしたりするTSV単純にタブ文字で区切るだけ今回のプログラムでは、簡単にデータを読み込むために、シンプル仕様のTSV形式を採用しました。$line);プログラム続いてプログラム本体についての説明です。こちらに置いてあります。サブルーチンのコードを見てもらったほうが掴みやすいと思います。"\n良い旅を!\n";}ソースコード内に難しい構文は有りませんが、データ構造が少し複雑なので、戸惑われる方もいるかもしれません。いう3つの変数について下記にまとめるので、読解の参考にしてください。ファイルから読み込んだ内容」のハッシュの配列のリファレンス。追加されるキーで、値は最終的な必要な数量です。キーの値から取り出した言葉」の配列のリファレンス。$conditions「ユーザーから得た条件群」のハッシュのリファレンス。プログラミング勉強会などで「シンタックスは学んだけど、この知識をどう活かせばいいのかが分からない。いろいろなことを勉強しないと何もできない気がする」という声をときどき聞くので、基礎知識でできることの一例を紹介しました。この記事が、どなたかが何かを作り始めるきっかけに繋がれば幸いです。Perlガイド東海の主催者の一人として、初心者さん向けのプログラミング勉強会を名古屋で不定期開催しています。Perlガイド東海のイベントにお越しください。1日目に参加しました月別アーカイブはてなブログをはじめよう!wakegiskyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。