初めてのPerl 第6章 練習問題3
#!/usr/bin/perl use strict; use warnings; foreach my $key(sort(keys %ENV)){ print "$key => $ENV{$key} \n"; } =pod while (my($key, $value)=each %ENV){ printf "%2s => %2s\n", $key, $value; } =cut
BLOCKSIZE => K
EDITOR => vi
ENV => /home/vagrant/.shrc
HOME => /home/vagrant
LANG => ja_JP.eucJP
LC_ALL => ja_JP.eucJP
LC_MESSAGES => ja_JP.eucJP
LOGNAME => vagrant
MAIL => /var/mail/vagrant
MANPATH => /usr/share/man:/usr/local/man:/usr/share/openssl/man:/usr/local/lib/perl5/5.16/man:/usr/local/lib/perl5/5.16/perl/man
MM_CHARSET => ja_JP.eucJP
OLDPWD => /home/vagrant
PAGER => more
PATH => /home/vagrant/perl5/perlbrew/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/vagrant/bin:/sbin:/usr/bin/perl:usr/sbin/:.:
PERLBREW_BASHRC_VERSION => 0.67
PERLBREW_HOME => /home/vagrant/.perlbrew
PERLBREW_ROOT => /home/vagrant/perl5/perlbrew
PWD => /home/vagrant/perltest/hash/practice
SHELL => /usr/local/bin/bash
SHLVL => 2
SSH_CLIENT => 10.0.2.2 49979 22
SSH_CONNECTION => 10.0.2.2 49979 10.0.2.15 22
SSH_TTY => /dev/pts/0
STY => 928.pts-0.vagrant-freebsd-92
TERM => screen
TERMCAP => SC|screen|VT 100/ANSI X3.64 virtual terminal:\
:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:bs:bt=\E[Z:\
:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:ct=\E[3g:\
:do=^J:nd=\E[C:pt:rc=\E8:rs=\Ec:sc=\E7:st=\EH:up=\EM:\
:le=^H:bl=^G:cr=^M:it#8:ho=\E[H:nw=\EE:ta=^I:is=\E)0:\
:li#60:co#120:am:xn:xv:LP:sr=\EM:al=\E[L:AL=\E[%dL:\
:cs=\E[%i%d;%dr:dl=\E[M:DL=\E[%dM:dc=\E[P:DC=\E[%dP:\
:im=\E[4h:ei=\E[4l:mi:IC=\E[%d@:ks=\E[?1h\E=:\
:ke=\E[?1l\E>:vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l:\
:ti=\E[?1049h:te=\E[?1049l:us=\E[4m:ue=\E[24m:so=\E[3m:\
:se=\E[23m:md=\E[1m:mr=\E[7m:me=\E[m:ms:\
:Co#8:pa#64:AF=\E[3%dm:AB=\E[4%dm:op=\E[39;49m:AX:G0:\
:as=\E(0:ae=\E(B:\
:ac=\140\140aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++,,hhII00:\
:k0=\E[10~:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:\
:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\
:F1=\E[23~:F2=\E[24~:kb=^H:K2=\EOE:kB=\E[Z:kh=\E[1~:\
:@1=\E[1~:kH=\E[4~:@7=\E[4~:kN=\E[6~:kP=\E[5~:kI=\E[2~:\
:kD=\E[3~:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:km:
USER => vagrant
WINDOW => 2
_ => ./practice3.pl
初めてのPerl 第7章 正規表現の世界 練習問題4
読み込んでいるファイルの先頭文字が大文字になっているものを表示する。
#!/usr/bin/perl use strict; use warnings; open (FILE, "<", "names.txt"); foreach my $name (<FILE>){ chomp($name); if ($name =~ /^[A-Z][a-z]+$/){ print $name . "\n"; } }
以下参照しているファイルになります。
fred flintstone
fred
barney.
fred
fred flintstone
Mr. Slate
alfred
takeshi
alfred
frederick
Fred
FRED
FRed
Fred
mississippi
Bamm-Bamm
llama
以下実行結果になります。
Fred
Fred
初めてのPerl 第7章 正規表現の世界 練習問題3
「.」がついている行を表示させる。
#!/usr/bin/perl use strict; use warnings; open (FILE, "<", "names.txt"); foreach my $name (<FILE>){ chomp($name); if ($name =~ /\./){ print $name . "\n"; } }
参照しているファイルになります。
fred flintstone
fred
barney.
fred
fred flintstone
Mr. Slate
alfred
takeshi
alfred
frederick
Fred
FRED
FRed
Fred
mississippi
Bamm-Bamm
llama
以下実行結果となります。
barney.
Mr. Slate
初めてのPerl 第7章正規表現の世界 練習問題2
fred、alfred、frederickなど「fred」が含まれた行を、大文字小文字区別せず表示する。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use 5.010; open (FILE, "<", "names.txt"); #<FILE>から1つづつ値を取り出して表示する foreach my $name (<FILE>){ chomp($name); #print Dumper $name; #入力値にfredが含まれているか判断する if($name =~ /[Ff}red/){ print $name; } }
以下参照しているファイルになります。
fred flintstone
fred
barney.
fred
fred flintstone
Mr. Slate
alfred
takeshi
alfred
frederick
Fred
FRED
FRed
Fred
mississippi
Bamm-Bamm
llama
以下実行結果となります。
fred flintstone
fred
fred flintstone
alfred
alfred
frederick
Fred
Fred
初めてのPerl 第7章正規表現の世界 練習問題1
fred、alfred、frederickなど「fred」が含まれた行を表示する。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use 5.010; open (FILE, "<", "names.txt"); print Dumper @_; foreach my $name (<FILE>){ chomp($name); #print Dumper $name; #print Dumper @_; =pod #入力値にfredが含まれているか判断する if($name eq 'fred'){ print $name . "\n"; }else{ print " \n"; } =cut if ($name =~ /fred/){ print $name . "\n"; } }
参照している「names.txt」は以下の通りです。
fred flintstone
fred
barney.
fred
fred flintstone
Mr. Slate
alfred
takeshi
alfred
frederick
Fred
FRED
FRed
Fred
mississippi
Bamm-Bamm
llama
以下実行結果となります。
fred flintstone
fred
fred
fred flintstone
alfred
alfred
frederick
初めてのPerl 第6章 ハッシュ 練習問題2
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use 5.010; my %names; open (FILE, "<", "names.txt"); #ファイルから取得してきた値をハッシュに格納する。 foreach my $name(<FILE>){ chomp($name); $name = lc($name); $names{$name} += 1; } # warn Dumper \%names; while(my($key, $value)= each %names){ printf ("%12s は%6s票です\n",$key,$value); }
読み込んだファイルの内容は以下です。
柴犬
柴犬
ダックス
コーギー
シュナウザー
ビーグル
柴犬
ダックス
コーギー
マルチーズ
マルチーズ
チワワ
マルチーズ
実行結果は以下のようになります。
ビーグル は 1票です
ダックス は 2票です
コーギー は 2票です
チワワ は 1票です
マルチーズ は 3票です
柴犬 は 3票です
シュナウザー は 1票です
初めてのPerl第6章ハッシュ 練習問題1
入力した値(名)に応じて、対応した値(姓)を返します。 以下プログラムになります。
#!/usr/bin/perl use strict; use warnings; my @persons = <STDIN>; chomp(@persons); my %people = (fred => 'flintstone', barney => 'rubble', wilma => 'flintstone', ); =pod foreach my $person(@persons){ printf "$person $peoples{$person}\n"; } =cut #もし登録がない人が来たら未登録ですと表示させる。 foreach my $person(@persons){ if(exists $peple{$person}){ printf "$person $people{$person}\n"; }else{ print "$person is Unregistered\n"; } }
プログラムの実行結果は以下のとおりです。
fred
barney
wilma
tom
fred flintstone
barney rubble
wilma flintstone
tom is Unregistered
現在登録してあるのは「fred、barney、wilma」の三人だけなので、入力値「tom」には、未登録のメッセージを返します。