perl - Perl 中的哈希常量

标签 perl constants

我有一种情况,我有一个应用程序,它映射到我需要在 zipfile 中处理的目录。映射非常简单:

CWA => "Financial",
PIP => "",
IFA => "IFA",
VDX => "Financial,

也就是说,如果文件名以 CWA 开头,我知道我要munge的目录在Financial下.如果文件名以 IFA 开头, 我知道目录名是 IFA .我想将其设置为散列(足够简单),但由于这些值并没有真正改变,我想将此键 => 值映射设置为散列常量。

我不相信这是可能的,所以我想做下一个最好的事情。那会是什么?或者,您可以设置哈希常量吗?

我正在考虑编写一个子程序,您可以在其中传递一个参数并返回正确的值。毕竟,这确实是常量本身的工作方式,它可以保证键和值之间的关系在整个程序中不会改变。

或者,我可以在程序的开头简单地声明键 => 值关系,并希望键 => 值对不会被某些东西修改。这将更易于阅读,并且在您必须时更容易修改,因为它位于我的源代码的最顶部。

实现键 => 值常量的最佳方法是什么?

最佳答案

  • 只需使用命名哈希。最有可能的,不会出错。
  • 使用 Readonly .这使得散列可以像任何其他散列一样访问,但不能修改,除非有人开始在 perl 内部乱搞。正如其文档中所述,与常规变量访问相比,它很慢,但它不太可能慢到对您很重要。
  • 在子程序中隐藏哈希。

  • .
    sub get_directory_for_prefix {
        my ($prefix) = @_;
        my %map = (
            CWA => "Financial",
            PIP => "",
            IFA => "IFA",
            VDX => "Financial",
    
        );
        return $map{$prefix};
    }
    

    甚至
    sub get_directory_for_prefix {
        {CWA=>"Financial",PIP=>"",IFA=>"IFA",VOX=>"Financial"}->{shift()};
    };
    

    关于perl - Perl 中的哈希常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4370058/

    相关文章:

    perl - 使用 Mojo::DOM 时无法精确定位子元素

    perl - grep 或 sed 使用相同的模式匹配开始和结束之间的 block

    c++ - iterator 和 const_iterator 之间的比较是否效率低下?

    c++ - const vector<T> * 哪一部分是const?

    c - 指向函数的常量指针数组

    perl - 在 Perl 中分配和测试定义时理解优先级

    perl - 等效于 "shift"的散列以创建 $class->next() 方法

    mysql - 在 perl 5.10.0 MacOS 10.6.8 上安装 DBI

    C++ 初始化静态常量结构变量

    rust - rust 中的 "const fn"可以连接字节切片吗?