1o0 Project

第3(2)回Perl入学式に参加した

2022-12-03

今日はPerl入学式 in大阪 2022 第3回 〜ハッシュ/サブルーチン 編〜 - connpassに参加した。

第3回と言いつつ、実際的には第2回。なぜかといえば第1回は流れたから。

第2回から参加していて、今回も参加者2名に対して講師1人、サポーター2人という異様に分厚い体制だった。講師のtomcha_(@tomcha_)さんが説明をし、業務でPerlを使っているサポーターの方々が現場ではこのような書き方をしていると教えてくれる。

これが無料で受講できるなんて…というわけで、以下、メモ。

やったこと

前回は基本的なシェルコマンドの使い方と、初歩的なPerlの文法…頭に$をつけるスカラー変数までを教えてもらった。内容的には第1回テキスト第2回テキストに沿ったものだった。

そのカリキュラムにはなかったけれども、ターミナル上ですぐに実行できるワンライナーの書き方(書式: perl -E '...' 例: 電卓がわりperl -E '$num = 8; say $num; $num *= 10; say $num')が便利だと印象に残っている。

今回の内容は第3回テキストに沿ったもので、頭に@をつける配列と、%をつけるハッシュを学んだ。

配列

C言語やJavaだと配列に異なるデータ型の値を入れることはできないが、Perlはそれができる。

また、C言語やJavaだと配列は固定長なので最初に定義した数以上の要素を入れることはできないが、Perlにはそれができる。

というより、Perlの配列宣言にはそもそも型も要素数も要らない。

これだけだと「PythonやJavascriptのような他のスクリプト言語でも同じだよね」となるが、Perlは変数名の頭に@とシジルをつけることによって配列だと示していることに特徴がある。

int array[5] = {1,2,3,4,5}; // OK!!
int array[5] = {1,'a',3,4,5}; // Error!!
exampleList = [1,"a",3,4,5] #リスト型
exampleTuple = ('a', 2, '日本') #タプル型
@array = {1,'a',3,4,5};

なるほど。


また、Perlの配列の特徴として、配列に配列を入れた場合に、配列として入るのではなく、個々の要素として入るという動作がある。

たとえば

配列1 = [要素1-1,要素1-2,要素1-3]
配列2 = [配列2-1,配列2-2,配列2-3]

という二つの配列があったとして、配列1の先頭に配列2を挿入するとPythonでは

配列1 = [[配列2-1,配列2-2,配列2-3],要素1-1,要素1-2,要素1-3]

というような構造になる。

しかし、同様の処理を行うとPerlでは

配列1 = {配列2-1,配列2-2,配列2-3,要素1-1,要素1-2,要素1-3};

という構造になる。

だから、Perlでは多次元配列はできない。

なので、それをどうにかする必要がある。

それは次回のお楽しみ。

ハッシュ

配列は添字を用いて要素にアクセスするが、ハッシュとは任意のKEYで対になるVALUEを取得する。

Pythonでいうところの辞書型かしらと思って聞いていた。

Perlでは変数名の頭に%とシジルをつける。

たとえば、こんな感じの書き方になる。

my %larry_profile = (
    name => 'Larry Wall',
    birth => 1954,
    lang => 'Perl',
);

別に

my %larry_profile = (name,'Larry Wall',birth,1954,lang,'Perl',);

と書いても、プログラムを処理するコンピュータは奇数番目の値がKEY、偶数番目の値がVALUEとして認識するが、ソースコードを読む人間がこんがらがるので、上の書き方が推奨される。

なるほど。

ハッシュはこうした形で取り出して使うことができる。

#!/usr/bin/env perl
use strict;
use warnings;

my %menu = (
    '生ビール'   => 380,
    '枝豆'      => 180,
    '唐揚げ' => 300,
    'ハラミ' => 500,
    'イカの姿焼'   => 600,
    'アイス'     => 400,
);

my @keys = keys %menu;
my @sorted = sort @keys; 

for my $key (@sorted) {
    my $value = $menu{$key};
    print "$keyの価格は$value円です。\n";
}

懇親会

大阪駅前第3ビルの勝男で一杯。

見ていたら同じビルに二店舗展開しているので、繁盛しているんだなぁ。

第3ビルB2応援団 勝男 6月2日オープン | 勝男 | 貴方の街の応援団 大分からあげと鉄板焼 居酒屋

懇親会では、マイコンと3Dプリンタの話、昨今の人手の様子についてなど。