blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_1

Perl 「 モジュール 」File::Spec メソッドリスト その 9 (0xab)

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)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲