Perl入学式 in大阪 第2回 〜構文基礎編〜(まとめ)(逐次追記していきます。)(2019/06/09)
<!DOCTYPE html>
Contents
1. Perl 入学式 2 回目
前回の復習
- Hello World を画面に出力してみよう♪
#!/usr/bin/env perl use strict; use warnings;上記おまじない三行は必ず入れるようにする。
perl -wc program.plとすると構文チェックをしてくれる。-wc を行わなくてもおまじないが書いてあるのでプログラム実行時に -wc を行ったときの様なメッセージをプログラム実行時に表示してくれる。
- Hello World を画面に出力してみよう♪
講義&実習
スカラー変数
print "Hello, World!\n"; my $foo; $foo = 'tomcha';"" で囲むと制御文字を認識して処理してくれる。
” で囲むとそのままの文字として認識し制御文字などそのまま出力される。四則演算
#!/usr/bin/env perl use strict; use warnings; my $i = 5 + 3; my $j = 10 % 3; print "5 + 3 = $i\n"; print "10 / 3 のあまり $j\n"; my $foo = 4; my $bar = 2; my $result; $result = $foo + $bar; print '$foo + $bar = '; print "$result\n"; $foo = 100; $bar = 2; $result = $foo - $bar; print '$foo - $bar = '; print "$result\n"; $foo = 100; $bar = 2; $result = $foo ** $bar; print '$foo べき乗 $bar = '; print "$result\n"; $foo = 100; $bar = 2; $result = $foo / $bar; print '$foo ÷:bar = '; print "$result\n"; my $min = 150; my $hour; $result = $min % 60; $hour = ( $min - $result ) / 60; print "$hour 時間 $result 分\n"; # 簡略的な演算方法 $foo = 4; $foo = $foo % 3; print "$foo\n"; $foo = 4; $foo %= 3; print "$foo\n"; # インクリメント・デクリメント $foo = 100; $foo++; print "$foo\n"; $foo--; print "$foo\n"; # 後置・前置 $foo++; print "$foo\n"; --$foo; print "$foo\n";べき乗計算や加減乗除など普通の計算式を書く事が出来る。
文字列連結
#!/usr/bin/env perl my $foo = 'hoge'; my $bar = 123; my $baz = $foo . $bar;.( ドット ) を用いる事によって文字同士を連結させて表示させることが出来る。計算
#!/usr/bin/env perl print 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; print "\n"; print 100 - 200; print "\n"; print 1000 + ( 1000 * 0.08 ); print "\n"; print 5 * 2 * 3.14; print "\n";変数を用いない色々な計算方法。
#!/usr/bin/env perl use strict; use warnings; my $pizza = 10; print '$pizza / 5' . "\n"; print $pizza / 5; print "\n"; print $pizza % 5; print "\n";計算式を表示する方法。
標準入力
print "Your Name ?"; my $name = <STDIN>; chomp $name; print $name . "!\n"; print "Your OS ?"; my $name = <STDIN>; chomp $name; print $name . " is useful OS!\n";STDIN は, 最初に全部入力を受け取ってから処理される。
#!/usr/bin/env perl use strict; use warnings; print "num1?"; my $str1 = <STDIN>; chomp $str1; print "num2?"; my $str2 = <STDIN>; chomp $str2; print "tashizan : "; print $str1 + $str2; print "\n"; print "hikizan : "; print $str1 - $str2; print "\n"; print "kakezan : "; print $str1 * $str2; print "\n"; print "warizan : "; print $str1 / $str2; print "\n";標準入力による加減乗除。
ls -l 合計 32 -rw-r--r-- 1 root root 361 6月 8 16:29 2019 calc.pl -rw-r--r-- 1 root root 102 6月 8 15:21 2019 compare.pl -rw-r--r-- 1 root root 147 6月 8 14:09 2019 hello.pl -rw-r--r-- 1 root root 166 6月 8 16:16 2019 hello.stdin.pl -rw-r--r-- 1 root root 185 6月 8 15:39 2019 sansuu1.pl -rw-r--r-- 1 root root 152 6月 8 15:53 2019 sansuu2.pl -rw-r--r-- 1 root root 271 6月 8 14:25 2019 sclar_practice.pl -rw-r--r-- 1 root root 932 6月 8 15:16 2019 text.plコマンドラインの標準入出力の結果を標準出力に渡して加工する。
ls -l | perl -ape 's/^/aaa /' aaa 合計 32 aaa -rw-r--r-- 1 root root 361 6月 8 16:29 2019 calc.pl aaa -rw-r--r-- 1 root root 102 6月 8 15:21 2019 compare.pl aaa -rw-r--r-- 1 root root 147 6月 8 14:09 2019 hello.pl aaa -rw-r--r-- 1 root root 166 6月 8 16:16 2019 hello.stdin.pl aaa -rw-r--r-- 1 root root 185 6月 8 15:39 2019 sansuu1.pl aaa -rw-r--r-- 1 root root 152 6月 8 15:53 2019 sansuu2.pl aaa -rw-r--r-- 1 root root 271 6月 8 14:25 2019 sclar_practice.pl aaa -rw-r--r-- 1 root root 932 6月 8 15:16 2019 text.pl先頭を
aaaに置き換えて表示する。ls -l | perl -anE 'say $F[8]' 2019 2019 2019 2019 2019 2019 2019 20198 行目を抜き出す。
ls -l | perl -anE 'say $F[9]' calc.pl compare.pl hello.pl hello.stdin.pl sansuu1.pl sansuu2.pl sclar_practice.pl text.pl9行目を抜き出す。
条件分岐 ( if 文 )
my $foo = <STDIN>; chomp $foo; if( $foo == 1 ) { print "OK\n"; } else { print "NG\n"; }標準入力によって処理を分ける。
chompは必ず入れるようにする。
↑ 改行が認識されてうまく判定が行えない場合がある。#!/usr/bin/env perl use strict; use warnings; my $answer = "perl"; print "何か文字を入力?"; my $str = <STDIN>; chomp $str; if( $str eq $answer ) { print "OK\n"; } else { print "NG\n"; }文字列比較を行う場合には
eqと''を使って比較を行う。#!/usr/bin/env perl use strict; use warnings; my $answer = 10; my $user = <STDIN>; chomp $user; if( $answer == $user ) { print "OK\n"; } elsif( $user > $answer && $user - $answer <= 5 ) { print "near too big\n"; } elsif( $user > $answer ) { print "too big\n"; } elsif( $user < $answer && $user - $answer <= 5 ) { print "near too small\n"; } else { print "to small\n"; }数当てゲーム、ユーザの入力した数値によって答えの数値に大きいか小さいかヒントを与えるプログラム。

Share this page