-
飲食の可否
-
手洗いの場所
-
喫煙場所
-
講義中の疑問点
-
うまくプログラムが動かない
-
分からない
上記についてはサポーターが適宜回答やアドバイスを Discord でおこないます。
テキストまたは音声チャットにて個別にサポートしますので、気軽に質問してください。
-
Youtube
-
スライド共有ツール
-
Discord
それぞれのツールへのリンクは connpass のイベントページに掲載しています。
-
動画の中継:Youtube Live
-
コミュニケーション:Discord
-
講義スライド共有:スライド同期くん
-
Perl 実行環境
- Windows:MSYS2 上の Perl(第 0 回 環境構築編)
- macOS:システムにインストールされている Perl
-
スマホ・タブレットで Youtube Live を視聴
-
PC で スライド同期くん ・ Perl 実行環境 ・ Discord を開く
仮想デスクトップ機能・マルチディスプレイ、タブレットを併用するなどしながら学習を進めましょう。
講師が見ているスライドを受講生の手元で反映するためのツールです。
画面下にある「スライドを同期する」にチェックボックスを入れ、 講師のアカウントを選択します。
練習問題を解く時など、じっくりスライドを確認する時はチェックを外してください。
ネットワークの環境により、講師が行っている講義と Youtube Live で配信される映像がずれることが予想されます。
「同期の遅延」で設定されている 0 秒 のところをクリックすると、スライドをめくるタイミングを遅らせることができます。
まずは 30 秒を基準にして設定し、Youtube Live で配信される講師スライドに合わせて調整を行ってください。
スライドめくりなど、利用方法については画面右上のリンクで表示が可能です。
-
msys2 で Perl の開発環境を構築するためには、約 1GB のストレージ容量を必要とします。
-
C ドライブの容量が心配な方は、必要に応じて D ドライブや USB メモリ等にインストールしてください。
-
メモリ(RAM)は Windows 自体がストレスなく動く環境であれば特に問題ありません。
-
一部のアンチウイルスソフトで誤検知を確認しています。アンチウイルスソフトは Windows Defender を推奨します。
これから Windows で Perl を学ぶための環境構築を行なっていきます。
文字の説明だけでは難しいところもあるので、動画を用意しました。ぜひ活用してください。また、字幕での動画も各項目ごとに用意しています。
32 ビットと 64 ビットの Windows: よく寄せられる質問内の「コンピューターで実行中の Windows が 32 ビット バージョンであるか 64 ビット バージョンであるかを確認するにはどうすればよいですか?」を参考に判別します。
また、動画も用意しています。
環境にあわせて、「msys2-i686-YYYYMMDD.exe」または「msys2-x86_64-YYYYMMDD.exe」を利用します。
-
Windows が 64 ビットバージョンの場合:msys2-x86_64-YYYYMMDD.exe
-
Windows が 32 ビットバージョンの場合:msys2-i686-YYYYMMDD.exe
うまくダウンロードできない人はサポーターに聞いてください。
ファイル名の i686 や x86_64 はアーキテクチャ名であり、YYYYMMDD は msys2 がリリースされた日付です。
動画も用意しています。
ダウンロードした exe ファイルをダブルクリックして開くと、インストールが始まります。
正常に終わらない場合は、右クリックして「管理者として実行」してください。
「MSYS2 xxbit のセットアップ」と表示されるので、「次へ」を押します。
動画も用意しています。
デフォルトでは「C:¥msys64」や「C:¥msys32」と表示されます。
変更する必要がなければそのまま「次へ」を押します。
同じフォルダ名が存在する場合はエラーになります。
デフォルトでは「MSYS2 64bit」や「MSYS2 32bit」と表示されます。
任意の名前を指定できますが、変更する必要がなければそのまま「次へ」を押します。
ここまで完了すると「MSYS2 64bit のインストール」または「MSYS2 32bit のインストール」と表示され、msys2 のインストールがはじまります。

インストールが完了すると「MSYS2 64bit のウィザードの完了」または「MSYS2 32bit のウィザードの完了」と表示されます。

「MSYS2 64bit を実行中。」「MSYS2 32bit を実行中。」どちらかが表示されます。チェックボックスはオンにしたまま「完了」をクリックします。
インストーラーで「完了」をクリックすると msys2 が起動します。
この「黒い窓」「黒い画面」のことを「ターミナル」「端末」と言います。
次回以降は次のどちらかの方法で起動します。
-
スタートメニューから「MSYS2 MSYS」を選択して起動
-
インストールしたディレクトリ内の「msys2.exe」を起動
-
タスクバーの検索メニューに msys2 と入力し、検索候補の中から「MSYS2 MSYS」を選択して起動
次のようなウィンドウが表示される場合があります。
Perl を利用する場合は「MSYS2」が適しているため、「MSYS2」を選択します。
パッケージマネージャはソフトウェアを管理するためのソフトウェアです。
このパッケージマネージャを利用して Perl をインストールします。
msys2 では pacman というパッケージマネージャを利用します。
これ以降、下記のように入力コマンドを示す記載が頻繁に例示されます。
# msys2 とデータベース情報のアップデート
$ pacman -Syu「#」から始まる行はコメントです。入力は不要です。
「$」はプロンプトです。コマンドが入力ができる状態であることを意味します。$ の入力は必要ありません。
上記は pacman -Syuと入力し、行末で enter キー、またはリターンキーを押すことを意味します。
Perl のインストールまで動画も用意しています。
利用するソフトウェアを最新で安全な状態に保つためには、パッケージマネージャが管理している情報の更新が不可欠です。
次のコマンドを実行して pacman が管理しているデータベースを更新しましょう。
大文字・小文字にも意味があります。書いてある通りに入力してください。
# msys2 とデータベース情報のアップデート
$ pacman -Syuアップデートが成功すると、ターミナルは自動で閉じられます。
pacman を利用して、さまざまなソフトウェアをインストールすることができます。
さっそく perl をインストールしてみましょう。
次のコマンドを実行して perl を利用するために必要なソフトウェアをインストールします。 すべて完了するまで少し時間がかかります。
# perlと必要なソフトウェアのインストール
$ yes "" | pacman -Sy perl perl-CPAN msys2-devel make libcrypt-devel openssl perl-Net-SSLeay perl-IO-Socket-SSL次のコマンドを実行して perl のバージョンを確認します。
This is perl 5, version xx, ... などと表示されれば、インストールは成功しています。
# perlのバージョンを確認する
$ perl -v次のコマンドを実行して perl で利用する cpan が動作することを確認します。
# cpanの動作状況を確認する。入力を求められるので yes と入力してエンターキーを押す
$ cpan JSON::XS
# インストールが完了したら以下を実行。正常な場合は何も出力されません。
$ perl -MJSON::XS -e 1既に別の Perl をインストールしている場合、環境変数 PERL5LIB の影響を受ける場合があります。
その場合は「PERL5LIB=」などを実行し、PERL5LIB を空にしてから実行してください。
msys2 に限らず、ほとんど全てのソフトウェアは様々な理由でアップデートされます。
msys2 は pacman 利用することで、インストールされているソフトウェアを最新にすることができます。定期的に実行しましょう。
以下のコマンドを実行すると msys2 にインストールされているソフトウェアがアップデートされます。
ただし、アップデートは時間がかかるため、ここでは実行せずに家で実行する ようにしてください。
# ソフトウェアのアップデート
$ pacman -Syu更新内容によっては、全ての更新が 1 度で終了せずに msys2 を 1 度閉じてから、再度起動し、もう一度上記のコマンドを実行する必要があるので覚えておきましょう。
パッケージマネージャを利用したパッケージの検索とインストールの方法を紹介します。
もしもインストールが失敗する場合は、先ほど紹介したアップデートを実行してみましょう。
# パッケージの検索(perl-YAMLを検索する)
$ pacman -Ss perl-YAML
# パッケージ情報を確認(perl-YAMLを確認する)
$ pacman -Si perl-YAML
# パッケージのインストール(perl-YAMLをインストールする)
$ pacman -S perl-YAMLmsys2 では windows のコマンドも実行できます。
ただし、ターミナルの文字コードの問題で文字化けが発生する場合があります。
msys2 に用意されている start コマンドは、アプリケーションを実行するためのコマンドです。
これは非常に便利な機能です。試しに以下のコマンドを実行してみてください。
# startの後にスペースと.(ドット)を入力して実行
$ start .現在のディレクトリで Explorer が起動します。
先ほどの start コマンドで開いた Explorer のディレクトリパスを見てみましょう。
次のようなパスになっているはずです。
# XXはアーキテクチャによって変わります。
# <User>の部分は皆さんが利用しているユーザー名です。
C:\msysXX\home\<User>msys2 は標準で C:\msysXX\ 配下に様々なディレクトリを作成します。
そのため、ファイルの編集には Windows のアプリケーションをそのまま利用することができます。
大切なことなので、必ず覚えておいてください。
macOS も Linux も、Windows と同じく GUI で操作可能です。
ですが、プログラミングをする上で CUI (CLI) は避けて通れません。
-
CUI ... Character User Interface
-
CLI ... Command Line Interface
これらは文字によって操作を行うインターフェイスのことを指します。
-
Windows ならば、コマンドプロンプトに該当します。
-
Linux / macOS ではターミナルに該当します。
プログラムの起動や制御をCUI(CLI)で行うプログラムのことを、シェルと呼びます。
ターミナルを開くと、シェルを使った操作が出来るようになります。
Windowsの方はインストールした MSYS2 MSYS を 、 Mac ユーザーの方は Launchpad から「ターミナル」を選択し、起動します。
ターミナルは頻繁に起動するため、タスクバーやDockへ追加しておくことをおすすめします。
ターミナルでは入力待ちの時にプロンプトが表示されます。
zsh, macOS Catalina(10.15)以降
%Bash, MSYS32, macOS Mojave(10.14)以前の標準, Linux
$これら行頭に表示される記号は「入力受付の状態」を示すものです。この記号は入力する必要はありません。
また、プロンプトはカスタマイズも可能です。興味がある人はGoogleで「プロンプト カスタマイズ」等で検索してみましょう。
Perl入学式の中でもよく使うコマンドを紹介します。
シェルには、これから紹介する以外にも様々なコマンドがあります。
OSやシェルの種類によって使えるもの、使えないものがありますが、使いこなせば作業の負担を軽減することができます。
参考図書:まんがでわかるLinux シス管系女子
$ ls
デスクトップ ダウンロード (以下略)ls は、現在いるディレクトリにあるファイルを表示します。
コマンド名は 'list segments' の頭文字を取ったものです。
ls -a は、.(ドット) で始まる、通常は見えない隠しファイルも含め、すべて表示します。
このように、コマンドに追加の命令(-a の部分)をつけて動作を変えることができます。
この追加の命令を引数といいます。
$ pwd
/home/usernamepwd は、現在いるディレクトリの場所(パス)を表示します。
コマンド名は 'print working directory' の頭文字を取ったものです。
$ mkdir sample
$ ls
sample デスクトップ ダウンロード (以下略)mkdir DIRECTORY は、DIRECTORY というディレクトリを作ります。
コマンド名は 'make directory' を短縮したものです。
$ cd sample
$ pwd
/home/username/sample
$ cd ..
$ pwd
/home/usernamecd DIRECTORY で、DIRECTORY に移動します。
コマンド名は 'change directory' を短縮したものです。
上の階層のディレクトリは .. で表示されます。cd .. とする事で、上の階層に移動します。
$ touch sample1 sample2
$ ls
sample1 sample2touch には2つの役割があります。 touch FILENAME とした時・・・
- FILENAME がすでに存在する場合には、ファイルのアクセス日時と更新日時を現時刻に書き換える
- FILENAME が存在しない場合には、空のファイルを生成する
$ ls
sample1 sample2
$ rm sample1
$ ls
sample2rm FILENAME は、FILENAME のファイルを削除します。 FILENAME1 FILENAME2 のように半角スペースで区切ることで複数個指定することができます。
コマンド名は 'remove' を短縮したものです。
この rm コマンドによる削除は即時反映されます。Windows の「ゴミ箱」に当たる機能はありません。注意しましょう。
$ mkdir del_sample
$ ls
del_sample
$ rmdir del_sample
$ ls
$rmdir DIRNAME は、DIRNAME のディレクトリを削除します。ただしディレクトリは空である必要があります。
コマンド名は 'remove directory' を短縮したものです。
ディレクトリの中身ごとを削除するときは、先に紹介した rm に引数をつけた rm -r DIRNAME で削除します。
-rという引数は recursive(再帰的) を意味しています。
$ ls
sample2
$ cp sample2 sample1
$ ls
sample1 sample2cp SOURCE_FILE DEST_FILE は、SOURCE_FILE を DEST_FILE にコピーします。
コマンド名は 'copy' を短縮したものです。
ディレクトリをコピーするときは、引数 -r を指定し、cp -r SOURCE_DIR DEST_DIR となります。
$ ls
sample1 sample2
$ mv sample1 sample_text
$ ls
sample_text sample2mv SOURCE_FILE DEST_FILE で、SOURCE_FILE を DEST_FILE に移動します。
コマンド名は 'move' を短縮したものです。
ファイルやディレクトリの名前を変更する為にも使えます。
$ start .start DIRECTORY で、DIRECTORY を Windows 標準の Explorer というファイルマネージャで開きます。start は対象となるファイルの種類によって動作が変わります。
例えばディレクトリが対象ならば上記のように Explorer で表示、エクセルファイルなら Excel で開く、という動作をします。
$ open .open DIRECTORY で、DIRECTORY を macOS 標準の Finder というファイルマネージャで開きます。
open は対象となるファイルの種類によって動作が変わります。
例えばディレクトリが対象ならば上記のように Finder で表示、テキストならばテキストエディタで表示、という動作をします。
- ホームディレクトリに
perl-entranceというディレクトリを作りましょう。
ホームディレクトリとは、ユーザごとに用意された作業場所のようなものです。
cd とだけ入力してエンターキーを押すと、ホームディレクトリに移動します。
- 作った
perl-entranceディレクトリの中に移動しましょう。
続きます
-
**カレントディレクトリ(現在いるディレクトリ)**のパスを
pwdで表示し、その後に、startもしくはopenを使って、ファイルマネージャで開いてみましょう。 -
touchでtext.txtというファイルを作成し、openコマンドで開いてみましょう。
コードを書く時に最も使う道具、それがエディタです。
プログラミングに特化した様々なエディタが開発されていますが、Perl 入学式では Visual Studio Code を推奨しています。
特にこだわりのない方は、今回紹介する Visual Studio Code を利用してください。
もちろん、Emacs や Vim、サクラエディタなど、既に使い慣れているエディタがある方はそちらをお使いください。
Visual Studio Code の公式ページ Visual Studio Code - Code Editing. Redefined へアクセスし、 Download をクリックします。
ダウンロードした VSCodeUserSetup-**.exe をダブルクリックすると、インストールが開始されます。
** としたところにはバージョン番号が入ります。
インストール後は、スタートメニューから「Visual Studio Code」をダブルクリックすれば Visual Studio Code が起動します。
インストール直後は自動的に起動します。
ダウンロードした VSCode-darwin-stable.zip をダブルクリックすると、Visual Studio Code.app が生成されます。
これをダブルクリックすれば Visual Studio Code が起動します。
「 "Visual Studio Code.app" はインターネットからダウンロードされたアプリケーションです」という警告が出た場合、「開く」をクリックします。
メニューが英語でとっつきにくい場合には、日本語化することが可能です。
-
ウィンドウ左上の View -> Command Palette から
Configure Display Languageと入力して候補を選択する。 -
Install Addicional Languages を選択する。
-
左側のメニューから「日本語」を選択し、緑色の「Install」ボタンを押す。
-
一度 Visual Studio Code を閉じて、再度起動する。
-
英語表記に戻す場合には、1. から en を選択してから Visual Studio Code を再起動します。
-
左上メニューから
-
Windows 版:ファイル -> ファイルを開く(または Ctrl を押しながら o)
-
macOS 版:ファイル -> 開く(または command を押しながら o)
-
「Ctrl を押しながら o」などの、カーソルではなく、キーボードの上のキーのみで操作するための組み合わせを ショートカット といいます。
-
左上メニューの ファイル -> 保存(Windows / Mac 共通)
-
Windows 版ショートカット(Ctrl を押しながら s)
-
Mac 版ショートカット(command を押しながら s)
-
perl-entrance ディレクトリ内に profile.txt という空のファイルを用意して、Visual Studio Code で編集する例です。
-
cdコマンドを利用し、perl-entranceフォルダに移動する -
touchコマンドを使い、profile.txtを作成する -
Windows(MSYS2)の場合は
start .で Explorer を 、macOS の場合はopen .で Finder を開き、中のprofile.txtを Visual Studio Code にドラッグ&ドロップする -
編集が終わったら Visual Studio Code の上にある ファイル メニューから 保存 を選択する
プログラム言語の学習において、最初に解説するのは
「Hello, world! と表示するプログラム」
とされています。
作法に乗っ取り、Hello, world! を表示する Perl プログラムに挑戦してみましょう。
print "Hello, world!\n";hello.pl というファイルを作成し、エディタで上記のプログラムを書いて保存します。
-
printは、ターミナルに文字を出力する命令です。 -
\nは改行を意味します。 -
Mac の日本語キーボードの場合、
\は Option +¥キーで入力できます。 -
文の最後にはセミコロン(
;)が必要です。文の区切りという意味です。
プログラムの保存が終わったら、ターミナルで以下のように打ち込みます。
$ perl hello.plperl の引数に実行したいファイル名を与えると、そのファイルが Perl で実行されます。
$ perl hello.pl
Hello, world!無事、Hello,world! が表示されたでしょうか?
#!/usr/bin/env perl
use strict;
use warnings;プログラムには、問答無用で書いておく「おまじない」ともいうべきものがあります。
Perl では上記の 3 行が「おまじない」となります。
-
#!/usr/bin/env perl... shebang と呼ばれるもので、このプログラムが perl で動くことを明示する -
use strict;... 厳密な書式で書くことを強制し、未定義の変数があれば警告する -
use warnings;... 望ましくない記述を警告する
これらの「おまじない」により、わかりやすく堅牢なコードを書くことができます。
以降、Perl 入学式のサンプルコードではスペースの都合により「おまじない」を省略します。書かれているものとして扱ってください。
「この勉強会の名前」と「今日の日付」を表示するプログラム entrance.pl を書いてみましょう。
print文を 2 つ利用してください。以下はヒントです。
-
プログラムは上から順に実行されます。
-
「おまじない」を忘れない事!
-
文末に
;を入れるのを忘れないでください。 -
可読性(読みやすさ)向上のため、セミコロンの後に改行を入れて複数の行にしましょう。
print "hello! \n\n\n\n\n world!";上記のプログラムはどのような結果になるか考えてみてください。
また、上記のプログラムを入力、またはコピペして実行し、どのような結果になるかを確認してください。
ファイル名は newline.pl とするのが良いでしょう。
print "Hello World!"; # -- ここがコメント部 --
# print "Hello! Perl Entrance!"; 行頭に # があるため、printは実行されない-
各プログラム言語にはプログラムをわかりやすくするために、コメントを入れる仕組みがあります。
-
Perl では、井桁記号
#より右にある文字列は全てコメントとして扱われます。 -
コメントは実行されません。
-
Perl 入学式のサンプルコードでも、 コメントを使ってプログラムに補足を行います。
-
「変数」は、いわば「データを格納できる箱」です。
-
Perl の変数には、「スカラ変数」、「配列」、「ハッシュ(連想配列)」という 3 つの種類があります。
3 種類の変数は、それぞれの変数の型を示す シジル(sigil) という記号で区別されます。
-
スカラ変数(
$):1 つの要素を格納する。 -
配列(
@):複数の要素を「順番に」格納する。 -
ハッシュ(
%):複数の要素を「key名 => 値」の組み合わせで格納する。
配列とハッシュは次回以降に解説します。
my $num; # 変数を宣言する
$num = 1; # 右辺の 1 を左辺の $num に入れる
print "$num\n"; # \n は改行-
変数を初めて使うときは、先頭に
myをつけます。 -
変数を利用できるようにすることを「変数を宣言する」といいます。
-
スカラ変数の先頭には、
$numのように$をつけます。$はスカラ(scalar)のS、と覚えるとよいでしょう。
my $num; # 変数を宣言する
$num = 1; # 右辺の 1 を左辺の $num に入れる
print "$num\n";-
=という記号(代入演算子)を使うことで、「右辺の値」を「左辺のスカラー変数$foo」に入れる(代入する)ことができます。 -
小学校で学んだ算数で、両辺の値が等しいことを指す記号である
=ですが、プログラムで使う=とは記号こそ同じでも意味が異なります。 -
代入演算子については、後ほど四則演算の項でも説明します。
プログラム言語の参考書には以下の単語が変数名として利用されることがあります。
-
foo, bar, baz
-
hoge, piyo, fuga
-
Alice, Bob, Carol, Dave, Eve
-
これら「意味のない名前」をつけることで、「サンプル用」「例示用」の変数ということを明示します。
-
foo,bar,buzこのような単語を使った変数を「メタ構文変数」と呼称します。 -
これらのメタ構文変数は現場のプログラムでは利用してはいけません。
-
変数名には、明確な名前をつけるようにしましょう。また、現場ごとの命名規則に従うことも大事です。
-
変数名として使える文字は以下です。
- 大文字・小文字の英数字
- アンダースコア(
_)
-
さらに、変数名の先頭文字には以下の文字のみ利用が可能です。
- 英文字
_
複数の単語で変数名をつける時は、単語間を _ で繋げる場合が多いです。
このような _ で単語をつなげる記法をスネークケース(snake_case)といいます。
Perl では基本的にスネークケースを推奨しています。
my $foo; # 変数を宣言する
$foo = 1; # 右辺の 1 を左辺の $foo に入れる
print "$foo\n"; # 1
$foo = "Hello World"; # $foo は宣言済みなので my は不要
# 右辺の "Hello World" が 左辺の $foo に入る
print "$foo\n"; # Hello World-
宣言した変数を 2 回目以降に使うときは、
myは不要です。myは変数を宣言する初回のみ必要です。 -
値が入っているスカラー変数に別の値を代入すると、変数の中身が上書きされます。
my $foo = 1; # 変数の宣言と同時に代入する
print "$foo\n"; # 1変数は、宣言と代入を同時に行うことができます。
my $foo = 1;
print "$foo\n"; # " ダブルクォーテーションで囲うと 1 が表示される
print '$foo\n'; # ' シングルクォーテーションで囲うと $foo\n が表示される-
" "ダブルクォーテーションで変数を囲うと、その変数の中身が表示されます。 -
' 'シングルクォーテーションで変数を囲うと、変数の中身ではなく、書いてあるままに表示されます。
#!/usr/bin/env perl
use strict;
use warnings;
my $foo = "Hello" # "Hello"の後にセミコロンがない
print "$foo\n";エラーメッセージ
syntax error at prog.pl line 6, near "print"
Execution of prog.pl aborted due to compilation errors.-
よくありがちなエラーとして、行末の セミコロン
;を忘れるというものがあります。 -
さきほどの場合、6 行目の print の周辺(上下の行)でシンタックスエラーが発生しているという意味になります。
Perl に限らず、プログラムのエラーメッセージのほとんどは英語で表示されます。
最初は戸惑うかもしれませんが、エラーメッセージ中にある行番号を手がかりに直前・直後の行でおかしいところを探してみましょう。
また、エラーメッセージそのものを Google などで検索したり、翻訳することでエラー解決への手がかりを掴むこともできます。
エラーが出るのは悪いことではありません。直すべき場所を明示してくれるありがたい指針です。
エラーを出さずにプログラムを習得することはできません。
落ち着いて対処していきましょう。
-
1 から 9 までの好きな数字をスカラー変数に格納し、それらの値を表示するプログラム
number.plを作成しよう!$numberや$numや$intなど、数字を入れるのに相応しい変数名を利用してみましょう。
-
「おまじない」の 3 行を忘れずに!
-
好きなプログラミング言語の名前をスカラ変数に格納し、それらの値を表示するプログラム
word.plを作成しよう!$languageや$langなど、変数の中身が推測できる変数名を利用しましょう。
my $foo = 4;
my $bar = 2;
my $result;
# 足し算 +
$result = $foo + $bar; # 足し算 して $result に代入する
print "$foo + $bar = "; # 式の表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する
# 引き算 -
$result = $foo - $bar; # 引き算 して $result に代入する
print "$foo - $bar = "; # 表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する算数と同じ + と - が利用できます。
my $foo = 4;
my $bar = 2;
my $result;
# 掛け算 * (アスタリスク)
$result = $foo * $bar; # 掛け算 して $result に代入する
print "$foo * $bar = "; # 表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する
# 割り算 / (スラッシュ)
$result = $foo / $bar; # 割り算 して $result に代入する
print "$foo / $bar = "; # 表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する算数の掛ける × は *、割る ÷ は / と、算数と異なる記号を使います。
my $foo = 4;
my $bar = 2;
my $result;
# べき乗 **
$result = $foo ** $bar; # 4 の 2乗 を $result に代入する
print "$foo ** $bar = "; # 式の表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する
# 剰余 %
$result = $foo % $bar; # 4 を 2 で割った余りを $result に代入する
print "$foo % $bar = "; # 表示だけ。改行はしない。
print "$result\n"; # 上の式に続けて $result を表示する剰余は、初めて聞く言葉かもしれません。利用例を解説します。
まず、剰余が 0 であれば、「割られる数」は「割る数」の倍数であることが確認できます。
print 100 % 10; # 100 / 10 の余りである 0 が表示されるさらに、剰余はグルーピングに利用できます。
例えば「今日の 100 日後の曜日」を求めるとき、100 日分カレンダーを辿るのは大変です。
1 週間は 7 日なので、7 日後は同じ曜日となります。14 日後も同じ曜日となります。21 日、28 日、35 日... 7 の倍数日後は同じ曜日になります。
これを利用し、100 日 を 7 日 で割ってみます。剰余は 2 となります。
print 100 % 7; # 100 / 7 の余りである 2 が表示される今日の曜日と同じであれば剰余は 0、明日の曜日と同じであれば剰余は 1、明後日と同じ曜日であれば 2、と簡単に計算が可能です。
これは、曜日が 7 種類あることを利用したグルーピングです。
my $foo = 4;
$foo = $foo * 3; # 右辺の計算結果( 4 * 3 )が、左辺の $foo に代入される
print "$foo\n"; # 12-
代入演算子
=は、算数のイコールとは性質が異なります。-
算数 :左辺と右辺が等しいことを示す
-
プログラム:右辺の計算結果を左辺に代入する
-
-
上記の例では右辺の「
$foo * 3」つまり 12 が=の左辺$fooに代入されます。
代入演算子( = )を利用して、変数の中身を書き換える処理は多いため、専用の記法が用意されています。
my $bar = 100;
my $foo = 50;
$bar += 1; # $bar = $bar + 1;と同じ
print "$bar\n"; # 101
$bar -= 1; # $bar = $bar - 1;と同じ
print "$bar\n"; # 100
$bar *= 2; # $bar = $bar * 2;と同じ
print "$bar\n"; # 200
$bar /= $foo; # $bar = $bar / $foo と同じ
print "$bar\n"; # 41 ずつ加算することを「インクリメント」といいます。この処理も多用するので、専用の記法が用意されています。
my $foo = 4;
$foo = $foo + 1;# 代入演算子を利用
print "$foo\n"; # 5
$foo += 1; # 省略記法
print "$foo\n"; # 6
++$foo; # 前置インクリメント
print "$foo\n"; # 7
$foo++; # 後置インクリメント
print "$foo\n"; # 8前置インクリメントと後置インクリメントを直接 print した場合、以下のような違いがでます。
$i = 0;
print $i++; # prints 0
$j = 0;
print ++$j; # prints 1誤動作の素なので、表示用の変数を用意して代入してから print した方が無難です。
前置インクリメントと後置インクリメントの違いについては perldoc の perlopを参照してください。
以下の問題を順番に書いて表示してみよう。
-
変数
$fooに 10,$barに 3 を代入し、それぞれを画面に表示させる。 -
変数
$fooから 変数$barを引いた数を画面に表示させる。 -
変数
$fooを 変数$barで割った時の余りを表示させる。
以下の問題を順番に書いて表示してみよう。
-
変数
$numに 8 を代入し画面に表示させる。 -
省略記法を使って、変数
$numを 10 倍し、画面に表示させる -
$numを 3 回インクリメントし、画面に表示させる。(正しくプログラムが書けていれば、83 と表示されるはずです。)
my $word = 'word';
my $num = 123;
print "$word$num\n"; # word123
print $word . $num . "\n"; # word123
my $str = $word . $num;
print $str . "\n"; # word123-
.(ドット)で文字列や変数を連結することができます。 -
連結した文字列や変数を、別の変数に代入することも可能です。
演算の優先順位と結合方向(演算の向き)は perldoc の perlop の項に詳細が記載されています。
しかし、これを覚えるのも、他の人に読んでもらうのも大変な労力です。以下のように、わかりやすい記述を心がけましょう。
-
( )で演算の順番を明確に示す -
数値演算と文字列の連結は分けて書く
my $num1 = 2 + 4 * 3;
print "$num1\n"; # 14
my $num2 = ( 2 + 4 ) * 3;
print "$num2\n"; # 18-
演算の順序は、
( )を付けることで変更することができます。 -
通常の算数と同じく、Perl も「足し算・引き算」より「掛け算・割り算」の優先順位が高くなっています。
-
下段の例では
( )を付けることで優先順位を変え、「足し算」を先に計算させています。
my $now = 2022;
my $start_perl_entrance = 2012;
print "Perl入学式は開講" . $now - $start_perl_entrance . "年です\n";
# Argument "PerlM-eM-^EM-%M-eM--M-&M-eM-<M-^OM-cM-^AM-/M-iM-^VM-^KM-h..." isn't numeric in subtraction (-) at / line 8.
# -2012年です上のプログラムは、警告が出た上に「-2012 年です」と、おかしな結果になります。
これは数値演算と文字列連結を混ぜた「アンチパターン(良くない例)」です。
-
まず 「
Perl入学式は開講」(文字列) と 「2022」(数字) が文字連結されます。(結果:「今年は開講 2022」) -
次に、「
今年は開講2022」(文字列) から 「2012」(数字)を引き算しようとし、おかしな結果になります。
my $now = 2022;
my $start_perl_entrance = 2012;
print "Perl入学式は開講" . ($now - $start_perl_entrance ). "年です\n"; # Perl入学式は開講10年です文字と数値計算は ( ) を用いて明確に分け、その後に連結するのが確実です。
my $now = 2022;
my $start_perl_entrance = 2012;
my $period = $now - $start_perl_entrance;
print "Perl入学式は開講" . $period . "年です\n"; # Perl入学式は開講10年です計算結果を別の変数に入れてから連結するのも良い手法です。
年に一度、Perl のお祭りが開かれます。
それが YAPC と呼ばれるイベントです。
2015年までは東京で、2016年からは日本各地で会場を移しつつ開催しています。
前回は 2023年3月19日に京都で開催されました。
YAPC::Kyoto 2023
https://yapcjapan.org/2023kyoto/
YAPC では Perl や Perl を利用したシステムについての発表が行われます。
これまで各地で開催されてきたYAPCのイベントページです。
画面上部の TIMETABLE からどのような発表が行われたのか、確認ができます。
YAPC::Asia Tokyo 2015 http://yapcasia.org/2015/
YAPC::Hokkaido 2016 SAPPORO https://yapcjapan.org/2016hokkaido/
YAPC::Kansai 2017 OSAKA https://yapcjapan.org/2017kansai/
YAPC::Fukuoka 2017 HAKATA https://yapcjapan.org/2017fukuoka/
YAPC::Okinawa 2018 ONNASON https://yapcjapan.org/2018okinawa/
YAPC::Tokyo 2019 https://yapcjapan.org/2019tokyo/
Japan.pm 2021 https://yapcjapan.connpass.com/event/198170/
YAPC::Kyoto 2023 https://yapcjapan.org/2023kyoto/
発表には、初心者には難しい内容のものもあります。
しかし気負わずに「こんな世界もあるんだ〜」程度に聴講すると、数年後にふと繋がることもあります。
懇親会に参加すると、さらに業界や Perl 界隈の裏話が聴けたりもします。
Perl入学式のサポーターは大概参加しています。
皆さんの参加をお待ちしています。
-
これまでは、あらかじめプログラムに書かれた文字や数字を表示してきました。これを「出力」といいます。
-
出力に対して、「入力」はプログラムやコンピュータに様々な数値や文字列を与えることをいいます。
-
この「入力」を用いて、プログラムの実行の都度、中身や出力を変えることができます。
-
コマンドライン引数は、プログラムが入力を受け取る方法の一つです。
ターミナルの場合には、以下のようにしてコマンドライン引数を設定します。
arg とあるのが引数です。(arg は 引数 argument という語の略語です)
$ perl single.pl arg複数の引数を受け取る場合には、空白で区切って列挙します。
$ perl multi.pl arg1 arg2この arg や arg1, arg2 にある文字や数字がプログラムに入力されます。
Wandbox の場合には、画面左上、バージョン情報の下にある Runtime options: の入力欄に「1 つの引数につき 1 行」で入力します。
まず、コマンドライン引数を受け取るために、プログラム側では変数を用意し、shift で代入します。
# コマンドライン引数の左から1番目の値を受け取り、変数 $first に代入する
my $first = shift;
# コマンドライン引数の左から2番目の値を受け取り、変数 $second に代入する
my $second = shift;
print 'first is ' . "$first\n"; # $first を表示する
print 'second is ' . "$second\n"; # $second を表示するターミナルでコマンドライン引数をつけて実行
$ perl season.pl autumnコマンドライン引数を受け取るプログラム例
my $season = shift; # コマンドライン引数 autumn を受け取り、
# 変数 $season に格納する
print "Alice loves $season\n"; # Alice loves autumnこのように、コマンドライン引数によってプログラムの実行結果を変えることが可能です。
コマンドライン引数にあなたの名前をローマ字(アルファベット)で入力して実行すると、
Hello, あなたの名前!
と表示されるようなプログラム hello_name.pl を作成しよう。
$ perl hello_name.pl Taro
Hello, Taro!コマンドライン引数 から 0 以外の整数を 2 つ読み込み、 それらを四則演算(+, -, *, /)した結果を下の例のように表示するプログラム calc_argument.plを作成しよう。
最初のコマンドライン引数に 1 、次に 2 を入れた場合、以下のように表示されるプログラムです。
$ perl calc_argument 1 2
1 + 2 = 3
1 - 2 = -1
1 * 2 = 2
1 / 2 = 0.5サポーターや参加者の皆さんと交流しましょう。
不明点は Discord #雑談部屋 で是非質問してください。
「●●をやりたいが、何から手をつけていいかわからない」といった質問にも、何かしらアドバイスやヒントを提供できる場になればと考えています。
次回以降の参加もお待ちしております!





















