一般的にはPerlのスクリプトと入出力ファイルは同じフォルダに置きますが、異なるフォルダに入れる場合もあります。その場合、以下のような指定になります。なお、サブフォルダは「\」で区切るのではなく、「/」で区切ります。
(1)スクリプトを含むフォルダと同じレベルの階層に入出力データがある場合(下図のような場合)
「open(IN1,"../input01.txt");」
などとします。「/」の前にピリオドが2つついていますが、これはスクリプトから見たときに、入出力ファイルが共通するフォルダにさかのぼるには、フォルダを2つさかのぼることを意味します。下記の例の場合、「inout.pl」から見たときに、「script_folder」と「AAA_folder」という2段階のフォルダをさかのぼっているので、ピリオドを2つ付けています。
【AAA_folder】-----【script_folder】--inout.pl | |-- input01.txt
(2)スクリプトを含むフォルダと同じレベルの階層にあるフォルダの下に入出力データがある場合(下図のような場合)
open(IN1,"./input_folder/input01.txt");
open(OUT1,">./output_folder/output01.txt");
などとします。「/」の前にピリオドが1つついていますが、これはスクリプトから見たときに、入出力ファイルが共通するフォルダにさかのぼるには、フォルダを1つさかのぼることを意味します。下記の例の場合、「inout2.pl」から見たときに、「AAA_folder」というフォルダにさかのぼっているので、ピリオドを1つ付けています。
または、
open(OUT1,">../AAA_folder/output_folder/output01.txt");
などとと指定することもできます
【AAA_folder】-----【input_folder】---input01.txt | |--【output_folder】--output01.txt | |-- inout2.pl
(3)スクリプトや入出力データがそれぞれ同じ階層にあるフォルダの下にある場合(下図のような場合)
open(IN1,"../input_folder/input01.txt");
open(OUT1,">../output_folder/output01.txt");
などとします。「/」の前にピリオドが2つついていますが、これはスクリプトから見たときに、入出力ファイルが共通するフォルダにさかのぼるには、フォルダを2つさかのぼることを意味します。下記の例の場合、「inout3.pl」から見たときに、「script_folder」と「AAA_folder」という2段階のフォルダをさかのぼっているので、ピリオドを2つ付けています。
【AAA_folder】-----【script_folder】--inout3.pl | |--【input_folder】---input01.txt | |--【output_folder】--output01.txt
(4)フルパスで指定する場合
上記はすべて相対的なパスで指定する方法ですが、フルパスで指定する方法もあります。その場合、ドライブを表す「c」や「d」の後にコロンを付けて、「\」ではなく、「/」でサブフォルダを指定していきます。
open(IN1,"c:/input_folder/input01.txt");
open(OUT1,">c:/output_folder/output01.txt");