gpt4 book ai didi

linux - 目录输入卫生

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:28 25 4
gpt4 key购买 nike

我有一个非常简单的移动文件的 perl 脚本(不要问我为什么不能使用 cp,它很长,很悲伤,会让你哭泣)。我从命令行 dir1 和 dir2 获取 2 个输入。然后我有一个内部文件列表,我将两者连接在一起。

my $file = dir1 . filename

只要用户在他们的目录中添加尾随/就可以很好地工作。但很明显,如果他们不这样做,它仍然会将其连接为/my/awesome/folderFILE 并且脚本会失败。

清理用户提供的目录的最佳做法是什么?

最佳答案

虽然你可以像其他答案提到的那样,只是强制添加一个尾部斜杠,但它有一些小问题源于双斜杠 - 如果你打印结果文件名,看起来很丑陋,至少恕我直言日志记录;一个更糟糕的问题是,如果需要,使所述日志更难自动解析/处理。

Perl 中一种更便携和惯用的方法是使用 File::Spec 构建路径:

use File::Spec;
my $file = File::Spec::catfile($dir1,$filename);

如果你觉得使用一个模块来做一些简单的事情是一种核弹式的方法,请使用正则表达式(so you can now have 2 problems!:)

$dir =~ s!([^/])$!$1/!;  

这种方法还有一个额外的好处,可以作为教学工具展示您不必使用正斜杠作为正则表达式分隔符。

此外,您可能已经很明显了,但值得重申:永远不要相信用户输入!!!

因此,在处理命令行参数时,总是执行类似die "Not a directory: $dir1\n"unless -d $dir1; 的操作。

关于linux - 目录输入卫生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com