ジョギング

久しぶりに10km走れてすっきり。夏までにはペースアップ出来るようになるかなぁ。
体重は全く減らない・・・

Perlの基礎(演算子とか覚えた事の追記)

演算子の「かつ」、「または」


演算子として「かつ」を || としたり「または」を&&とするが
ほぼ同じ意味合いで「かつ」をand、「または」をorという演算子で表現できる。

my $hour = 13;
if ( 9 <= hour and hour <= 17) {
    print 'お仕事中';
}

> お仕事中

なお、||&&よりand,or演算子のほうが優先順位は低くなるようです。

if文とunless文


if文では「もしも・・・だったら」を表現するがunless文では「もしも・・・でなかったら」を表現する。

if文だと・・・

if ($hour != 12) {
    print 'お昼ではありません。';
}

unless文だと・・・

unless ($hour ==12) {
    print 'お昼ではありません。';
}

if文とif修飾子


if文の{ }の内部が1つの文の場合、「if修飾子」を使ってシンプルに書くことができる。

if文では・・・

if ($hour < 8) {
print 'おはようございます。';
}

if修飾子でシンプルに書くと・・・

print 'おはようございます。' if ($hour < 8) ;

というように書くことができる。

if文とif修飾子ではプログラムは同じ動作となる。if文では「条件式を調べて真であれば処理が実行される」と なるが、if修飾子では「処理が実行される。ところでこれが実行されるのは・・の時です」という感じで 条件式よりも実行される処理に重点を置いた表現となる。 この使い分けはプログラムの「読みやすさ」を意識した書き方である。

参考書籍


Perlの基礎(ハッシュ変数)

ハッシュ変数とは


連想配列とも呼ばれ「キー」と「値」を1組のペアとして関連付けさせた配列。
% + 英字1文字から始まり、それ以降は英字、数字、アンダースコアが使える。

記述の方法は下記のようにし、キーを指定して値にアクセスする。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
print "$fruit{'red'}\n";

> apple

ハッシュ関数


  1. keys
    全てのキーを取り出す。
%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
@file = keys %fruit;
print "@file\n";

> red yellow purple

2.values
全ての値を取り出す。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
@file = values %fruit;
print "@file\n";
> banana grape apple

3.each
1組のキーと値を取り出す。while構文と併用して使用する。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
while (my($key,$val) = each %fruit) {
  print "$key : $val\n";
}

> red : apple
> purple : grape
> yellow : banana

4.delete
特定の要素を取り除く。

%fruit = ("red"=>"apple","yellow"=>"banana","purple"=>"grape");
delete $fruit{yellow}; #(yellow - banana)の要素を削除

while (my($key,$val) = each %fruit) {
  print "$key : $val\n";
}

> purple : grape
> red : apple

ハッシュスライス


%age = (tom=>21,mike=>19,kent=>25,nancy=>17);という年齢データを
ハッシュスライスを使用し
@age{qw(tom mike kent nancy) } = (21,19,25,17);と記述する事が出来る。

ハッシュスライスを用いて年齢を更新する。

my %age = (tom=>21,mike=>19,kent=>25,nancy=>17);

@age { qw(tom mike)} = (22,20);
while (my ($key,$val) = each %age) {
  print "$key : $val\n";
}

> nancy : 17
> tom : 22
> kent : 25
> mike : 20

ハッシュスライスを用いて値を取り出す。

my %age = (tom=>21,mike=>19,kent=>25,nancy=>17);
my @data = @age{qw(kent nancy)};
print "@data\n";

> 25 17

参考サイト


Perl基礎入門|KentWeb

Perlの基礎(配列、配列関数)

配列


  • @から始まり変数と同様に英字でスタート。アンダースコアも使える。
  • 配列の中の各要素は $配列名[添え字]で表す事ができる。
@fruit = ("apple","orange","banana");
print "$fruit[2]\n";

> banana
  • 配列の個数を取り出す。
@fruit = ("apple","orange","banana");
$num = @fruit;   #配列の個数
print "$num\n";

> 3
  • 配列に要素を追加する。
@fruit = ("apple","orange","banana");
@fruit = (@fruit,"grape");
print "@fruit\n";

> apple orange banana grape

配列関数


  • push 配列の末尾へ要素を追加
  • pop 配列の末尾の要素を削除
  • anshift 配列の先頭へ要素を追加
  • shift 配列の先頭の要素を削除
  • reverse 配列の順序を逆順にする
  • sort 配列の順序をソートする

ソートの方法がいろいろあったので書いておく。

  • 文字列を逆ソート
@cher = ("C","A","D","B");
@cher = sort{ $b cmp $a } @cher;
print "@cher\n";

> D C B A
  • 数値を逆ソート
@cher =( 3,1,4,2);
@cher = sort{ $b <=> $a } @cher;
print "@cher\n";

> 4 3 2 1

どうしてこのようにするのかは全く理解してません…

多次元配列


@list = (
    ['a','b','c'];
    ['d','e','f'];
    ['g','h','i'];
);

上記の二次元配列を例として1番目の配列だけ出力するには

@list = (
    ['a','b','c'],
    ['d','e','f'],
    ['g','h','i'],
);
print "@{$list[0]}\n";

> a b c

要素ごとに展開表示させるにはforeach文で繰り返し処理をする

@list = (
    ['a','b','c'],
    ['d','e','f'],
    ['g','h','i'],
);
foreach $tmp(@list) {
   print "@{$tmp}\n";
}

> a b c
> d e f
> g h i

参考サイト


Perl基礎入門|KentWeb

Perlの基礎(スカラ〜変数、演算子)

スカラー変数、演算子


スカラー変数を定義する時のルール

  • 英字で始める事。数字からスタートできない ◯ $abc$123
  • アンダースコアはOK。ハイフンはダメ ◯ $abc_123$abc-123
  • 変数への代入は整数、浮動小数点数、文字列を代入できる。文字列はシングルクォートかダブルクォートで囲む。
    $x = 1; $z = 3.1415; $a = "Hello";

print関数で出力してみる

  • 文字列を出力 コード例
$str = "りんご";
print "これは$strです\n";

> これはりんごです
  • 整数を出力 コード例
$weight = 65;
print "私の体重は$weightkgです\n";

とするとエラーとなる。変数$weightと文字列kgを繋げて解釈してしまう為。

$weight = 65;
print "私の体重は" . $weight . "kgです\n";

> 私の体重は65kgです

上記のように連結演算子のドットで文字列と変数を繋げて表示するか

$weight = 65;
print "私の体重は${weight}kgです\n";

> 私の体重は65kgです

このように変数展開し表示する。

スカラー演算子


Perlでは他の言語と同様に算術演算子が使用できます。 コード例

$a = 1;
$b = 2;
print $a + $b, "\n";

> 3
$a = 5;
$b = 2;
print $a % $b, "\n";

> 1

文字列演算子(連結)

$a = "ABC";
$b = "DEF";
print $a . $b , "\n";

> ABCDEF

文字列演算子(繰り返し)

$c = "ABC";
$d = 3;
print $c x $d, "\n";

> ABCABCABC

参考サイト


Perl基礎入門| KentWeb

勉強方法を変更してみよう

ここ1〜2ヶ月くらいProgateに課金してhtmlから順番に進めてきて今のレベルはこんな感じになった。f:id:ameroe:20170419133359p:plain

Rubyのレッスンが半分ちょっと進んだ段階で終わったらRailsのレッスンに移ろうとしていました。

Perl入学式に参加


前回の記事Perl入学式に参加してきたでも書きましたが これに参加してきた時に講師の方が「プログラミングを学ぶ時は1つの言語を集中してやるといい。それは他の言語を学ぶ時に共通したり似ている 事が多いから。」つまりPerlをある程度勉強してから例えばRubyを学ぶ時に通用する知識や考え方が多いよという事。
また「プログラミング言語って方言みたいなものだから」という言葉もあり、1つの言語に対してある程度の理解を深めていくことが重要なのだと 考えさせられました。

これからの学び方


講師の教えに従ってPerlの入門編を学ぶのに注力することにする。 具体的には以下の方法でとりあえずやってみる。

言わずと知れた動画プログラミングサイトですが、Perl入門編を活用する。

Perl入門で検索してオススメしている方も多かったので書籍での勉強と平行してみる。

こちらの本を購入したので出来るところまで進めてみる。理解できなければサイトで調べる。

このサイトは Perl の公式ドキュメント、モジュールドキュメントを日本語に翻訳したものを表示するサイトです。 サイト内の翻訳データは、Japanized Perl Resources Project(JPRP)で翻訳されたもの、有志が翻訳しているgithubリポジトリJPAの翻訳文書から取得しています。

公式の翻訳なので間違えないでしょう。

しばらくはこんな感じでPerlの基礎を学んでいきたい所存です。

Perl入学式に参加してきた

Perl入学式とは


Perl入学式は2012年に大阪で発足した、プログラミング初心者やPerl入門したい人を対象とした勉強会です。1年を通じて全5回のカリキュラムが行われ 5回目のカリキュラムではPerlを使って簡単なwebサービス(twitter風1行掲示板)を作れるようになろうという内容です。 今年2017年は大阪、東京、沖縄、札幌の4都市で開催される予定です。

詳しくはこちら Perl入学式とは

1回目でやったこと、教わったこと


Perl入学式 in札幌 第1回は3部構成になっていました。第1部ではwindowsユーザー向けの環境構築の部、 第2部はmacユーザーも参加しターミナルやエディタなど開発環境の構築。第3部ではPerlの歴史やPerl入学式の話、 ターミナルやエディタを使って実際にHello,worldを出力したり簡単なプログラムを書いてちゃんと出力されるかなどの内容でした。

僕はmacユーザーなので第2部からの参加。windowsユーザーの方々はVirtualBoxubuntuをインストールしているところでした。 無事、皆さんがインストールを終えた後に第2部スタート。ターミナルの基本操作の説明などを経て、 実際ホームディレクトリの下にmkdirコマンドでディレクトリを作成しtouchコマンドでファイルを作成したり、rm , open . , cdなどの基本的な操作を教わりました。
また、エディタでHello,world!を出力するプログラムや自己紹介を出力するプログラムを作成して出力するなど練習問題形式ですすんでいきました。

参加した感想


参加した感想としては「参加してよかった!」でした。自分自身、プログラミング初心者で参加者の方々に顔見知りがいない状況だったので 正直不安でしたが、入学式というだけあってしっかり初心者にも気を配ってくれていると感じました。
また講師の方の他にサポーターという方々が3〜4名いて、わからない人は近くのサポーターの方に声をかければ即座に教えてもらえる 体制となっていました。これは「質問する」という行為のハードルを下げてくれる良いシステムだなと感じました。
Rubyist(ルビイスト)やPythonista(パイソニスタ)のようにPerl使いはPerl Monger(パール・モンガー)というようで Perl入学式の校長であるpapix氏から「家に帰ったら家族にPerl Mongerになったって言うといいよ」と言われたので さっそく言ってみたけどまあ反応は無かったですw
全5回制覇してPerl Mongerを名乗れるように頑張りたいと思います。講師やサポーターの方々ありがとうございました!