Perlによるファイル操作の例
2022-01-29 07:59:14
perlで最も使われるのはファイル操作なので、以下に具体的な例を挙げてperlのファイル操作の理解を深めるために、いくつかまとめてみました。
ファイルの削除
unlink $file、unlink $file1、$file2、$file3 のような unlinke 関数を使用します。
ファイルを開く
スキーマとファイル名を区別するのが非常に簡単で、perl 5.6 以降でサポートされている 3 つの引数形式を使用してファイルを開くことができます。
コピーコード
コードは以下の通りです。
#Open the 'txt' file for reading
open FH, '<', "$file_name.txt" or die "Error:$!n"; #Open the 'txt' file for writing. already exist #and will delete/overwrite a pre-existing file of the same name open FH, '>', "$file_name.txt" or die "Error:$!n& quot;;
#Open the 'txt' file for appending. Creates the #file_name if it doesn't already exist
open FH, '>>', "$file_name.txt" or die "Error:$!n";
#Open the 'txt' file for a 'read/write'. #Will not create the file if it doesn't #already exist and will not delete/overwrite #a pre-existing file of the same name
open FH, '+<', "$file_name.txt" or die "Error:$!n"; #Open the 'txt' file for a 'read/write'. Will create #the file if it doesn't already exist and will #delete/overwrite a pre-existing file #of the same name open FH, '+>', "$file_name. txt" or die "Error:$!n";
#Open the 'txt' file for a 'read/append'. Will create #the file if it doesn't already exist and will #not delete/overwrite a pre-existing file #of the same name
open FH, '+>>', "$file_name.txt" or die "Error:$!n";
ファイル全体を一度に読む
スカラー環境では1行ずつ、リスト環境では全行を一度に読み込むために <> を使用すると、$/ には行の区切り文字が格納され、それはデフォルトでは改行なので、スカラー環境で全行を一度に読み込めるように $/ を変更します(もう行という概念がなく、単にファイル全体を読みます)。しかし、これでは遅い。終わったら$/を元に戻すのを忘れないように。
コピーコード
コードは以下の通りです。
#! /usr/bin/perl
use strict ;
use warnings ;
sub test{
open FILE, '<', "d:/code/test.txt" or die $! ;
my $olds = $/ ;
$/ = undef ;
my $slurp = ;
print $slurp, "n" ;
$/ = $olds ;
close FILE;
&test() ;
また、local キーワードを使って $/ をローカル変数として設定すると、スコープ外にジャンプした後、$/ は元の値に戻ります。
コピーコード
コードは以下の通りです。
#! /usr/bin/perl
use strict ;
use warnings ;
sub test{
local $/ ; #???? local $/ = undef ;
open FILE, '<', "d:/code/zdd.txt" or die $! ;
my $slurp = ;
print $slurp, "n" ;
}
&test() ;
自分で書くより安全なモジュールを使うのが一番です。File::SlurpやIO::Allは大丈夫です。
ファイルを開くには、二重引用符を使用します。
ファイルを開くとき、ファイル名に変数置換がある場合は、シングルクォートではなく、ダブルクォートを使用した方がよい。シングルクォートは変数補間を無視するからである。
コピーコード
コードは以下の通りです。
open FILE "<$file" or die $! ; #This will work.
open FILE '<$file' or die $! ; #This will not work, because $file will not be interpreted as variable interpolation. Likewise<will not be interpreted as input
ファイルハンドルをパラメータとする
引数が1つで、ある種のファイルハンドルを持つ関数testがあるとすると、その引数はどのように渡すのでしょうか?
方法1、引数を渡すとき、ハンドルの前に*を付ける。
コピーコード
コードは以下の通りです。
sub main {
open FILE, '+<', 'test.data' or die $! ;
&test(*FILE);
close FILE;
}
方法2、フォームを使用してファイルを開く open my $FILE
コピーコード
コードは以下の通りです。
sub main {
open my $FILE, '+<', 'test.data' or die $! ;
&test($FILE);
close $FILE;
}
関連
-
perl チュートリアル perl チュートリアル集
-
PerlのMail::POP3ClientモジュールとGmailの通信例
-
perlの文字列操作関数chompとchopの紹介
-
2つのファイルを比較し、データをフィルタリングするスクリプトコード(perlで実装されている
-
長さを指定し、ランダムなDNA配列を生成するperlスクリプトコード
-
PODのPerlのパーミッションの問題
-
perlのour-my-localスコープ宣言の紹介
-
重複するコンテンツ(重複する行+重複するフィールドの配列)を削除するための perl スクリプトコード
-
[解決済み] Perlで「ハッシュの代入の要素数が奇数である」という警告が出る
-
[解決済み] スクリプトからの不正なヘッダー。不正なヘッダー=<!DOCTYPE html> です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Perl一括で著作権情報を追加する
-
ファイル操作に関するPerl学習メモ
-
Perlファイルの読み書きの学習ノート
-
Perlのサブルーチン 学習メモ
-
サーバーのサービスが動作しているかどうかを検出するための perl スクリプトです。
-
Perl の Getopt::Long モジュールを使用して、ユーザーのコマンドライン引数を受け取ります。
-
Perlにおけるchompとchopの違いの紹介
-
ssh ログインの最大数を制限する perl スクリプト (ホワイトリスト対応)
-
[解決済み] Perlで強制的にフラッシュ出力することはできますか?
-
[解決済み] Perlで日付/時刻をエポックタイム(1970年からのunix時間/秒)に変換するには?