読者です 読者をやめる 読者になる 読者になる

続・初めてのPerl 第2章 「中級者の基礎知識」

「初めてのPerl」を一通り読み終えたので、「続・はじめてのPerl」を読み始めてみる。初めてのPerl の時と同じく、備忘録(+自分への戒め)として練習問題の回答をメモしていく。

ex02-1
#!/usr/bin/perl
use strict;


my @files = grep {-s $_ < 1000;} @ARGV;
my @results = map "    $_\n", @files;
print @results;
ex02-2
#!/usr/bin/perl
use strict;

# 初めてのPerl p.204
my $dir = "/etc";
my @dir_files = glob "$dir/* $dir/.*";

while (1) {
  print "Enter a pattern (except slash /): ";
  chomp(my $pattern = <STDIN>);
  last if $pattern =~ /^\s*$/;
  if ($pattern =~ /\//) {
    print "you can't use slash / as a pattern!\n";
    next;
  }
  my @results = eval {
    grep /$pattern/, @dir_files;
  };
  if ($@) {
    print "invalid pattern: $@";
  } else {
    print map "$_\n", @results;
    print "\n";
  }
}

反省点

foreach の代わりに map が使える場面では map を使おう。