初めての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」には、未登録のメッセージを返します。