perl 指定したディレクトリを削除する

#指定したディレクトリを削除するスクリプト
#rmdir.pl

print "削除するディレクトリ名を指定してください>";
$directory = <STDIN>;
chomp($directory);

if(-d $directory){
    #ディレクトリがすでにある
    #ディレクトリを削除
    rmdir($directory) || die "$directoryを削除出来ません。:$!\n";
}else{
    #ディレクトリがないかディレクトリではない
    print "$directoryは存在しません。またはディレクトリではありません。\n";
}

#実行結果
# $ perl rmdir.pl 
# 削除するディレクトリ名を指定してください>newDirectory
# $ perl rmdir.pl 
# 削除するディレクトリ名を指定してください>newDirectory
# newDirectoryは存在しません。またはディレクトリではありません。

初めてのPerl 第6版

初めてのPerl 第6版

perl ディレクトリの作成

#指定したディレクトリが存在するかどうか調べ、存在しない時は新しく作成する
#指定したディレクトリを作成
#mkdir.pl

print "作成するディレクトリ名を指定してください>";
$directory = <STDIN>;
chomp($directory);

if(!-d $directory){
    #ディレクトリがまだない
    #ディレクトリを作成
    mkdir($directory, 0755) || die "$directoryを作成できません:$!\n";
}else{
    #既に存在
    print "$directoryは既に存在します。\n";
}

#実行結果
# $ perl mkdir.pl
# 作成するディレクトリ名を指定してください>newDirectory
# $ perl mkdir.pl 
# 作成するディレクトリ名を指定してください>newDirectory
# newDirectoryは既に存在します。

初めてのPerl 第6版

初めてのPerl 第6版

perl ファイルの削除時にY/Nで確認する

#ファイル名を引数として受け取り、ファイルの有無を確認した後、
# 「<ファイル名>を削除しますか?(Y/N):」というメッセージを出して、Yが押された時のみファイルを削除するスクリプト

#ファイルの削除時に確認する
#remove_ask.pl

$filename = $ARGV[0];

if(-f $filename){
    while(){
        print "$filenameを削除しますか?(Y/N):";
        $answer = <STDIN>;
        chomp($answer);

        if($answer eq 'Y'){
            unlink($filename) or die "$filenameは削除できませんでした:$!\n";
            last;
        }elsif($answer eq 'N'){
            last;
        }else{
            print "無効な値が入力されました。\n";
        }
    }
}else{
    print "$filenameは存在しません。\n";
}


#実行結果
# $ perl remove_ask.pl  output.txt
# output.txtを削除しますか?(Y/N):y
# 無効な値が入力されました。
# output.txtを削除しますか?(Y/N):n
# 無効な値が入力されました。
# output.txtを削除しますか?(Y/N):Y

初めてのPerl 第6版

初めてのPerl 第6版

perl 既存のファイルに権限を追加する

#指定した引数をファイル名として扱い、そのファイルの所有者がユーザ自信であり、読み込み権限を持っていれば、既存の権限に加えて所有者とグループの書込権限を付けるスクリプト

#既存のファイルに権限を追加する
#append_mod.pl

if(@ARGV > 0){
    if(-o $ARGV[0]){
        #所有者のファイルかどうか調べる

        #ファイル情報を取得
        ($device, $inode, $mode, $nlink, $userid, $groupid, $rdev, $size, $accesstime, $modifytime, $changetime, $blocksize, $blockcount) = stat($ARGV[0]);

        #権限を追加
        chmod($mode | 0220, $ARGV[0]);
    }else{
        print "所有のファイルではありません\n";
    }
}else{
    print "ファイル名を指定してください\n";
}

初めてのPerl 第6版

初めてのPerl 第6版

perl statでファイルの詳細な情報を表示する

#指定したファイルの詳細な情報を表示する
#stat.pl

print "ファイル名を指定してください>";
$file = <STDIN>;
chomp($file);

#statで情報を取得
($device, $inode, $mode, $nlink, $userid, $groupid, $rdev, $size, $accesstime, $modifytime, $changetime, $blocksize, $blockcount) = stat($file);

#各情報を表示
printf("デバイス:%d\n".
       "i-node: %d\n".
       "権限値: %o\n".
       "リンク:%d\n".
       "ユーザID: %d\n".
       "グループID:%d\n".
       "デバイス識別子:%d\n".
       "サイズ:%d\n".
       "アクセス時間:%d\n".
       "更新時間:%d\n".
       "i-node変更時間:%d\n".
       "ブロックサイズ:%d\n".
       "ブロック数:%d\n",
       $device, $inode, $mode, $nlink, $userid, $groupid, $rdev, $size, $accesstime, $modifytime, $changetime, $blocksize, $blockcount
   );

#実行結果
# デバイス:16777222
# i-node: 820392
# 権限値: 100700
# リンク:1
# ユーザID: 501
# グループID:20
# デバイス識別子:0
# サイズ:0
# アクセス時間:1467785883
# 更新時間:1467736439
# i-node変更時間:1467787740
# ブロックサイズ:4096
# ブロック数:0

初めてのPerl 第6版

初めてのPerl 第6版

perl chmod関数で権限を変更する

#chmod関数を使って指定したファイルの読み込み、書込、実行権限をそれぞれ変更する

#ファイル権限の変更
#chmod.pl

print "ファイル名を指定してください>";
$file = <STDIN>;
chomp($file);

#初期状態を表示
print "初期状態:\n";
&fileinfo();

print "権限値を100にします\n";
chmod(0100, $file);
&fileinfo();

print "権限値を200にします。\n";
chmod(0200, $file);
&fileinfo();

print "権限値を400にします。\n";
chmod(0400, $file);
&fileinfo();

print "権限値を600にします。\n";
chmod(0600, $file);
&fileinfo();

print "権限値を700にします。\n";
chmod(0700, $file);
&fileinfo();

sub fileinfo{
    #ファイルの情報を表示
    print "\t$fileは読み込めます\n" if (-r $file);
    print "\t$fileは書き込めます\n" if (-w $file);
    print "\t$fileは実行できます\n" if (-x $file);
}

#実行結果
# ファイル名を指定してください>output.txt
# 初期状態:
# 	output.txtは読み込めます
# 	output.txtは書き込めます
# 権限値を100にします
# 	output.txtは実行できます
# 権限値を200にします。
# 	output.txtは書き込めます
# 権限値を400にします。
# 	output.txtは読み込めます
# 権限値を600にします。
# 	output.txtは読み込めます
# 	output.txtは書き込めます
# 権限値を700にします。
# 	output.txtは読み込めます
# 	output.txtは書き込めます
# 	output.txtは実行できます

初めてのPerl 第6版

初めてのPerl 第6版

perl ファイルの情報を調べる

#引数をファイル名とみなして、各情報を調べる
#ファイルのテスト
#filetest.pl

if(@ARGV > 0){
    #最初の引数をファイル名とみなす
    print "$ARGV[0] は通常のファイルです\n" if(-e $ARGV[0]);
    print "$ARGV[0] はディレクトリです。\n" if(-d $ARGV[0]);
    print "$ARGV[0] はシンボリックリンクです\n" if(-l $ARGV[0]);
    print "$ARGV[0] はあなたが所有者です。\n" if(-o $ARGV[0]);
    print "$ARGV[0] は名前付きパイプです\n" if(-p $ARGV[0]);
    print "$ARGV[0] は読み込めます。\n" if(-r $ARGV[0]);
    print "$ARGV[0] は書き込めます。\n" if(-w $ARGV[0]);
    print "$ARGV[0] は実行できます。\n" if(-x $ARGV[0]);
    print "$ARGV[0] はバイナリファイルです。\n" if(-B $ARGV[0]);
    print "$ARGV[0] はテキストファイルです。\n" if(-T $ARGV[0]);
    print "$ARGV[0] はソケットファイルです。\n" if(-S $ARGV[0]);
}else{
    print "ファイル名を指定してください\n";
}

#実行結果
# $ perl filetest.pl output.txt
# output.txt は通常のファイルです
# output.txt はあなたが所有者です。
# output.txt は読み込めます。
# output.txt は書き込めます。
# output.txt はバイナリファイルです。
# output.txt はテキストファイルです。

初めてのPerl 第6版

初めてのPerl 第6版

perl 指定したファイルを削除する

#指定したファイルを削除する
#unlink.pl

$file = <STDIN>;
chomp($file);
unlink($file) || die "$fileを削除できません:$!\n";

#実行結果
# $ perl unlink.pl 
# testtesttesttxt

初めてのPerl 第6版

初めてのPerl 第6版

perl 指定したファイルを指定した名前に変更する

#指定したファイルを指定した名前に変更するスクリプト
#ファイル名の変更
#rename.pl

print "変更前のファイル名>";
$from_file = <STDIN>;
print "変更後のファイル名>";
$to_file = <STDIN>;

chomp($from_file, $to_file);

#名前の変更
rename($from_file, $to_file) || die "$from_file から $to_file に名前変更出来ません。:$!\n";

#実行結果
# 変更前のファイル名>test.txt
# 変更後のファイル名>testtesttesttxt

初めてのPerl 第6版

初めてのPerl 第6版

perl ENDを着くんだ文字列が入るまで標準エラー出力に表示する

#キーボードの入力を、キーワードENDを含んだ文字列が入るまで、そのまま標準エラー出力に表示するスクリプト
while(1){
$string = <STDIN>;
    if($string =~ /END/){
        exit;
    }else{
        print STDERR $string;
    }
}

#実行結果
# abc
# abc
# def
# def
# ghi
# ghi
# END

初めてのPerl 第6版

初めてのPerl 第6版

perl ARGV

#引数の数と内容を表示する。

#引数の数を表示
print "ARGVの数:".@ARGV."\n";

#各引数の内容を表示
for($number = 0; $number< @ARGV; $number++){
    print "引数$number: $ARGV[$number]\n";
}

#実行結果
# $ perl argv.pl 
# ARGVの数:0

# $ perl argv.pl practical extraction and report language
# ARGVの数:5
# 引数0: practical
# 引数1: extraction
# 引数2: and
# 引数3: report
# 引数4: language

初めてのPerl 第6版

初めてのPerl 第6版

perl 標準入力または引数に指定したファイルを表示する

#標準入力または引数に指定したファイルをそのまま表示する
#標準入力とファイルの双方を受け取るスクリプト
#which.pl

#標準入力、ファイルのどちらかを取得
while(<>){
    #内容を表示
    print;
}

#perl which.plのように引数を指定しないで実行すると、標準入力を受け取る
#待機状態になる。文字列を入力してenterキーを押すとその文字列がエコーバッ
#クされ待機状態に戻る。perl which.pl test.txtのようにwhich.plに引数を
#指定すると、引数をファイル名とみなしてオープンし、その内容を入力とし
#て受け取り、画面に出力する。

#実行結果
# $ perl which.pl 
# hello
# hello
# hello
# hello
# how
# how
# low
# low
# ^C


# $ perl which.pl copyFile.txt 
# これをこぴー

初めてのPerl 第6版

初めてのPerl 第6版

perl 出力先を標準出力と標準エラー出力に分ける 

#出力先を標準出力と標準エラー出力に分ける
#標準出力と標準エラー出力の違い
#std.pl

#標準出力
print STDOUT "標準出力に出力しています。\n";

#標準エラー出力
print STDERR "標準エラー出力に出力しています。\n";

#実行結果
# $ perl std.pl 
# 標準出力に出力しています。
# 標準エラー出力に出力しています。
#
#$ perl std.pl > stdout.txt
# 標準エラー出力に出力しています。
#
#$ cat stdout.txt
# 標準出力に出力しています。

初めてのPerl 第6版

初めてのPerl 第6版

perl 標準入力STDIN

#標準入力からの入力を受け、それをそのまま表示する。(エコーバック)実行後、文字列を入力してEnterキーを押すと画面にその文字列を表示した後、また入力を待つ。QUITを含む文字列を入力するとスクリプトを終了する。

#入力をそのままエコーする
#echo.pl

do{
    #標準入力から取り込む
    $string = <STDIN>;
    #表示する
    print $string;
    #QUITを含む文字列が入ると終了する
}until ($string =~ /QUIT/);

#実行結果
# hello
# hello
# world
# world
# QUIT
# QUIT

初めてのPerl 第6版

初めてのPerl 第6版

perl ファイルのコピー

#コピー元のファイル名とコピー先のファイル名を入力するとファイルのコピーを行うスクリプト

#ファイルの内容を別のファイル名のファイルにコピーする
#copy2.pl

print "コピー元のファイル名を指定してください>";
$from_file = <STDIN>;
print "コピー先のファイル名を指定してください>";
$to_file = <STDIN>;

chomp($from_file, $to_file);

#それぞれのファイルをオープン
open(F, $from_file)  || die "$from_file をオープンできません:$!\n";
open(F2, ">$to_file") || die "to_file を作成できません:$!\n";

while(<F>){
    #コピー元のファイルから読み込み、コピー先のファイルに書き出す
    print F2;
}

close(F2);
close(F);


#実行結果
# cat copyFile.txt 
# これをこぴー

# perl copy2.pl 
# コピー元のファイル名を指定してください>copyFile.txt
# コピー先のファイル名を指定してください>pasteFile.txt
# cat pasteFile.txt 
# これをこぴー

初めてのPerl 第6版

初めてのPerl 第6版