chdir $today
您可能更愿意在打开文件之前使用,而不是一直使用完全限定的文件名。这将更改当前工作目录并强制使用相对路径或根本没有路径指定的文件相对于新目录打开。
此外,使用autodie
pragma 将避免需要检查等的状态open
;close
出于多种原因,最好使用词法文件句柄,包括当文件句柄变量超出范围时隐式关闭文件。
这就是您的代码的外观。
use strict;
use warnings;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
chdir $today;
open my $fh, '>>', $savepage;
print $fh $data;
}
但是,如果您的程序处理多个目录中的文件,那么chdir
在它们之间来回切换会很尴尬,并且必须显式保存原始目录,否则会被遗忘。在这种情况下,该File::chdir
模块可能会有所帮助。它提供了$CWD
包变量,如果它的值改变了,它将改变当前的工作目录。它也可以像任何其他变量包一样本地化,以便在本地化块的末尾恢复原始值。
这是一个例子。
use strict;
use warnings;
use File::chdir;
use autodie;
my $today = 'today';
my $savepage = 'savepage';
my $data = 'data';
mkdir $today unless -d $today;
{
local $CWD = $today; # Change working directory to $today
open my $fh, '>>', $savepage;
print $fh $data;
}
# Working directory restored to its previous value