我有一个情况,我有一个应用程序,它映射到我需要在zipfile中处理的目录.映射非常简单:
CWA => "Financial",
PIP => "",
IFA => "IFA",
VDX => "Financial,
Run Code Online (Sandbox Code Playgroud)
也就是说,如果文件的名称以...开头CWA,我知道我必须使用的目录Financial.如果文件名以a开头IFA,我知道目录名是IFA.我想将其设置为哈希(很容易),但由于这些值并没有真正改变,我想将此key => value mapping设置为哈希常量.
我不相信这是可能的,所以我想做下一个最好的事情.那会是什么?或者,您可以设置哈希常量吗?
我正在考虑编写一个子程序,你传递一个参数,它返回正确的值.毕竟,它实际上是常量本身的工作方式,并且它保证了键和值之间的关系不会在整个程序中发生变化.
或者,我可以在程序开头简单地声明key => value关系,并希望key => value对不会被某些东西修改.这将更容易阅读,如果你必须更容易修改,因为它在我的源代码的最顶层.
实现key => value常量的最佳方法是什么?
Eug*_*ash 10
你可以用Const::Fast.
use Const::Fast;
const my %hash = (
CWA => "Financial",
PIP => "",
IFA => "IFA",
VDX => "Financial",
);
Run Code Online (Sandbox Code Playgroud)
只需使用命名哈希.最有可能的是,什么都不会出错.
使用Readonly.这使得哈希像任何其他哈希一样被访问,但除非有人开始在perl内部进行修改,否则无法修改.正如其文档中所述,与常规变量访问相比,它的速度很慢,但它不太可能足够慢,对您来说很重要.
隐藏子例程中的哈希.
.
sub get_directory_for_prefix {
my ($prefix) = @_;
my %map = (
CWA => "Financial",
PIP => "",
IFA => "IFA",
VDX => "Financial",
);
return $map{$prefix};
}
Run Code Online (Sandbox Code Playgroud)
甚至
sub get_directory_for_prefix {
{CWA=>"Financial",PIP=>"",IFA=>"IFA",VOX=>"Financial"}->{shift()};
};
Run Code Online (Sandbox Code Playgroud)