Perl Perl_1
Perl 「 モジュール 」File::Spec メソッドリスト その 9 (0xab)
目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0xab 回。
Perl モジュール File::Spec の各種メソッドを確認する。その 9。
rel2abs() について。
File::Spec のメソッド その 8
Perl 「 モジュール 」File::Spec メソッドリスト その 1 (0xa3)
Perl 「 モジュール 」File::Spec メソッドリスト その 2 (0xa4)
Perl 「 モジュール 」File::Spec メソッドリスト その 3 (0xa5)
Perl 「 モジュール 」File::Spec メソッドリスト その 4 (0xa6)
Perl 「 モジュール 」File::Spec メソッドリスト その 5 (0xa7)
Perl 「 モジュール 」File::Spec メソッドリスト その 6 (0xa8)
Perl 「 モジュール 」File::Spec メソッドリスト その 7 (0xa9)
Perl 「 モジュール 」File::Spec メソッドリスト その 8 (0xaa)
File::Spec の各種メソッドの確認は今回で完了です。
abs ? 2 ? rel ?
前回確認したメソッドの名前は abs2rel でしたが、今回確認するメソッドの名前は rel2abs です。
「 2 」を挟んで、「 abs 」と「 rel 」の位置が入れ替わった名前ですから、両者には明らかな関係性がありそうです。
そこにどの様な関係性があるのか、まずはその名前から解き明かしてみましょう。
こうした名前の文字列は、多くの場合、その機能を表す英単語が元になっています。
既に確認したメソッド abs2rel() の機能は、与えられたシステムパス ( 絶対パス ) を相対パスに変換することでした。
「 絶対パスから相対パスへ 」で「 abs2rel 」です。この名前は実にシンプルにその機能を表します。
まず、「 abs 」は、英語の「 absolute 」を表していて、「 absolute path 」とした場合、それは「 絶対パス 」を意味します。
「 rel 」は、英語の「 relative 」を表しています。「 relative path 」とした場合、それは「 相対パス 」を意味します。
「 path 」という単語は、メソッド名から完全に省かれていますが、モジュール File::Spec の機能 ( システムパスを操作する ) を知っていれば、path 存在は自明となるため問題はありません。
間に挟まれた「 2 」は、スラングの一種で、英語の「 to 」を意味します。
これらを総合すると「 abs2rel 」は「 absolute path to relative path 」という文字列の短縮形であることが分かります。
このことを踏まえれば、「 rel2abs 」は「 relative path to absolute path 」を意味することがすぐに連想出来ます。
rel2abs()
メソッド rel2abs() は、「 相対パスを絶対パスに変換する 」と言います。
前項で確認した通り、これは「 Converts a relative path to an absolute path. 」と説明されている訳です。
rel2abs() は、abs2rel() と同じく、オプションとしてベースパス ( $base ) を取ることが出来ます。
また、標準モジュール Cwd::cwd() を利用してカレントディレクトリの情報を得ることや、ボリュームに対する注意等、ほとんどの動作は abs2rel() と同様です。
もし、与えられたパス ( $path ) が、絶対パスだった場合は、「 canonpath() を利用して対象のパスをクリーンにする 」と言います。
canonpath() は、「 0xa3 」で確認した File::Spec のメソッドです。
動作確認 $path のみ
メソッド rel2abs() の動作を確認します。
まずは、次の様に $path に「 under 」を代入しました。 プログラムを実行するディレクトリは「 /home/my/dir/script 」です。
my $path = "under";
my $abs_path = File::Spec->rel2abs( $path );
この場合、スカラ変数 $abs_path には次の文字列が格納されます。
/home/my/dir/script/under
これは、ルートディレクトリから under までの絶対パス ( フルパス ) です。
動作確認 $base を追加
次に、$path の値はそのままに、オプションのベースパス ( $base ) を利用します。$base には「 /home/my 」を代入します。
my $path = "under";
my $base = "/home/my";
my $abs_path = File::Spec->rel2abs( $path );
この場合、$abs_pash には次の文字列が格納されます。
/home/my/under
ベースパスをベースにした絶対パスが生成されています。
動作確認 $base に相対パス
$base に相対パスを指定します。
my $path = "under";
my $base = "./";
# または my $base = ".";
my $abs_path = File::Spec->rel2abs( $path );
$abs_path には次の文字列が格納されます。
/home/my/dir/script/under
カレントディレクトリを表す「 ./ 」は、プログラムを実行しているディレクトリ「 /home/my/dir/scrip 」です。
しっかりと絶対パスになっていますね。
動作確認 $path に相対パス
$path に相対パスを指定します。
my $path = "./under";
my $base = "/home/my/dir/";
my $abs_path = File::Spec->rel2abs( $path );
$abs_path には次の文字列が格納されます。
/home/my/dir/under
余計な「 ./ 」は、しっかりとクリーンアップされています。
動作確認 $path を汚してみる
$path に指定するシステムパスを汚してみます。
my $path = ".///under/./more_under";
my $base = "/home/my/dir/";
my $abs_path = File::Spec->rel2abs( $path );
$abs_path には次の文字列が格納されます。
/home/my/dir/under/more_under
しっかりとクリーンアップされています。
0xab -> 0xac へ
今回で、モジュール File::Spec のメソッド確認がすべて完了しました。軽い気持ち始めたものですが、思った以上のボリュームになりました。
それなりに苦労はしましたが、モジュールの機能を確認する方法といった技術的な側面と、英文の読み込みといった英語力の部分で、苦労に見合うだけのステップは踏めた様に思います。
次回は、これまで確認したメソッドをまとめます。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0xac) へ続く。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)