perl - Perl如何在程序完成后删除目录
问题描述
我希望允许用户通过命令行(例如 --clean)传递清理参数以删除包含不再需要的文件的目录。当我尝试执行 remove_tree 时,它会在程序运行期间执行。我怎样才能得到它,以便在整个运行完成后执行它,然后删除我不再需要的目录?
所以我有/$cleanup
我的getOptions。
if (defined $cleanup){
remove_tree("my path here");
}
这不是如何删除目录的问题,而是如何通过命令行仅根据用户选项删除它们。
编辑:我尝试使用 END 块。
这是我的代码的外观。
@arr = (John, Daniel, Mary); #there is path for each one of them generated
foreach my $arr (@array){
......
END{
remove_tree("/mydir/names/$array/outputfiles") if defined $cleanup;
};
}
我这样做是因为我希望为每个名称都完成它,但它不起作用。如果我这样做,它确实有效,但我宁愿用一行而不是三行。
@arr = (John, Daniel, Mary); #there is path for each one of them generated
foreach my $arr (@array){
......
END{
remove_tree("/mydir/names/John/outputfiles") if defined $cleanup;
};
}
解决方案
那种工作是END 块的主要用途之一
use File::Path;
...
END {
remove_tree( ... ) if defined $cleanup;
};
这个特殊的代码块
尽可能晚地执行,也就是说,在 perl 完成程序运行之后并且就在解释器退出之前,即使它是作为
die()
函数的结果而退出的。(但如果它通过 变形为另一个程序exec
,或者被信号吹出水面,则不是 - 你必须自己捕获它(如果可以的话)。)
这些END
块也在 上运行exit
,并且父END
块也在子进程中运行。它们可以通过使用POSIX ::_exit(status)
而不是exit
.
请注意,这是程序生命周期中的一个特殊阶段,有些事情可能不一样。例如,信号处理程序在RUN
阶段结束时消失(可以在第一个END
块中重新安装)。但是,您可以使用文件系统并清理文件等。
推荐阅读
- entity-framework - Entity Framework6 中的 HasConversion 函数
- c++ - 如何使用两个向量打印给定输入字符串中每个单词的频率?
- asp.net - 项目在错误的本地主机上运行的问题
- azure - 如何在现有的 azure databricks 工作区中获取集群、作业、安装的库等的总数?
- php - Docker-Compose with Nginx and PHP -> Nginx Config for Performance
- java - Spring Arangodb 存储边缘但因 MappingException 失败:找不到类型类 java.lang.Object 的 PersistentEntity
- node.js - 使用fabric-common模块离线签署交易
- elasticsearch - ElasticSearch - 分离很少使用的文档以获得更快的性能是否有意义?
- c# - CefWpf Twitter“无法播放媒体”错误
- amazon-web-services - 通过 API 网关(代理到 ECS)上传 zip 文件会导致 zip 文件损坏