如何使Perl文件操作平台无关?

发布于 2024-12-09 07:27:29 字数 438 浏览 1 评论 0原文

我在 Linux 上使用 Perl,但我开始使用 File::Spec->catfile 使我的 Perl 代码也可以在 Windows 上运行,例如,

$tmp = File::Spec->catfile($ENV{HOME}, "tmp");

而不是

$tmp = "$ENV{HOME}/tmp";

But how can I make the 以下代码可移植:

my @files = <$ENV{HOME}/tmp/*>;

它使用斜杠作为文件分隔符,所以我认为它在 Windows 上不起作用。我不知道如何在该表达式中使用 File::Spec->catfile

I use Perl on Linux, but I started using File::Spec->catfile to make my perl code run on Windows as well, e.g.,

$tmp = File::Spec->catfile($ENV{HOME}, "tmp");

instead of

$tmp = "$ENV{HOME}/tmp";

But how can I make the following code portable:

my @files = <$ENV{HOME}/tmp/*>;

It uses slashes as file separators, so I assume it won't work on Windows. And I don't see how to use File::Spec->catfile in that expression?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

芸娘子的小脾气 2024-12-16 07:27:29

由于 catfile 仅返回一个可用作文件名的字符串,因此您可以执行以下操作(未经测试):

$tmp = File::Spec->catfile($ENV{HOME}, "tmp", "*");
my @files = glob $tmp;

但是 $ENV{HOME} 不太可能在 Windows 系统上进行设置。

您可以考虑使用 File::Spec->tmpdir()

Since catfile just returns a string that can be used as a file name, you can do something like this (untested):

$tmp = File::Spec->catfile($ENV{HOME}, "tmp", "*");
my @files = glob $tmp;

But $ENV{HOME} isn't likely to be set on a Windows system.

You might consider using File::Spec->tmpdir().

喜爱皱眉﹌ 2024-12-16 07:27:29

可以使用 glob 函数:

my @files = glob File::Spec->catfile( $ENV{'HOME'}, 'tmp', '*' );

正如其他评论所言声明中,Perl 在 Windows 中与 / 一起工作。不过,为了让它更便携,我会考虑上面的用法。

The glob function can be used:

my @files = glob File::Spec->catfile( $ENV{'HOME'}, 'tmp', '*' );

As the other comments have stated, Perl works with / in Windows. However, to make it more portable, I will consider the above usage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文