初めてのPerl ~ 13章 ファイルとディレクトリの取り扱い ~
練習問題13.9.1
rmコマンドと同じ働きをするプログラムを書け。
このプログラムは、コマンドラインに指定したファイルを削除する
#!/usr/bin/perl
use warnings;
use strict;foreach (@ARGV){
unlink $_ or warn "Can't delete $_ \n";
}
練習問題13.9.2
mvコマンドと同じ働きをするプログラムを書け。
このプログラムは、1番目のコマンドライン引数で指定したファイルを、
2番目のコマンドライン引数で指定した名前にリネームする。
2番目の引数にディレクトリも指定するようにする。
その場合、新しいディレクトリの中で、リネームする前と同じベース名を持つようにする。
#!/usr/bin/perl
use warnings;
use strict;use File::Basename;
use File::Spec;my($source,$target) = @ARGV;
if( -d $target ){
my $base_name = basename $source;
$target = File::Spec->catfile($target,$base_name);
}rename $source,$target or warn "Can't rename to $target from $source \n";
練習問題13.9.3
lnコマンドと同じ動きをするプログラムを書け。
1番目のコマンドライン引数に対して、2番目の引数で指定した名前を持った
ハードリンクを作成する。
#!/usr/bin/perl
use warnings;
use strict;use File::Basename;
use File::Spec;my($source,$target)=@ARGV;
if(-d $target){
my $base_name = basename $source;
$target = File::Spec->catfile($target,$base_name);
}link $source,$target or die "Can't hardlink";
練習問題13.9.4
練習問題13.9.3にシンボリックリンク作成機能を追加せよ
1番目の引数の前に-sを指定することで、ハードリンクの代わりに、
シンボリックリンクを作成する。
#!/usr/bin/perl
use warnings;
use strict;use File::Basename;
use File::Spec;my $switch = $ARGV[0] eq "-s";
if ($switch){
shift @ARGV;
}
my($source,$target)=@ARGV;if(-d $target){
my $base_name = basename $source;
$target = File::Spec->catfile($target,$base_name);
}if($switch){
symlink $source,$target or die "Can't softlink";
}
else{
link $source,$target or die "Can't hardlink";
}
練習問題13.9.5
#!/usr/bin/perl
use warnings;
use strict;my $link;
foreach(<* .*>){
if ($link = readlink $_){
print "$link \n"
}
}
参考書
- 作者: ランダル・L.シュワルツ,トムフェニックス,Randal L. Schwartz,Tom Phoenix,近藤嘉雪
- 出版社/メーカー: オライリージャパン
- 発売日: 2003/05
- メディア: 単行本
- 購入: 15人 クリック: 474回
- この商品を含むブログ (273件) を見る