1
我有以下幾點:Perl的傳遞常量子程序
#! /usr/bin/perl
use strict;
# Declare some meaningful named constants
use constant {FOO => 2,
BAR => 3,
BAM => 4};
# Define paths between the named entities
my %PATHS = (FOO => {BAR => "Foo->Bar",
BAM => "Foo->Bam"},
BAR => {FOO => "Bar->Foo",
BAM => "Bar->Bam"},
BAM => {FOO => "Bam->Foo",
BAR => "Bam->Bar"});
# Printing out PATHS map does more or less what I expect:
foreach my $src (sort keys %PATHS) {
foreach my $dst (sort keys %{ $PATHS{$src} }) {
print "$src:$dst\t$PATHS{$src}{$dst}\n";
}
}
# I can't use the constants as parameters
sub findPath($$) {
my $src = shift;
my $dst = shift;
print "src:$src\ndst:$dst\n";
my $path = $PATHS{$src}{$dst};
print defined $path ? "path=$path\n" : "UNDEFINED\n";
}
findPath(FOO, BAR);
看來,我的常量爲裸詞和隱性引號可可西里路徑的聲明中補充治療。有沒有一種簡單的方法來定義這樣一個映射,其中符號鍵可以在函數調用中使用?
當然!有時候,你會習慣於某種做事方式,忘記了自己的所作所爲。用{x => y}以外的任何東西初始化散列看起來是錯誤的,即使它是正確的。 –
我知道你的意思。感覺很好,可以想象perl具有專門用於編譯時構建散列文字的語法(其中'=>'是鍵/值分隔符,並且逗號僅用於對之間),但這只是一種幻覺。 –
知道你的祕密操作員:[閃爍的胖逗號',=>'](https://github.com/book/perlsecret/blob/master/lib/perlsecret.pod#winking-fat-comma-)禁用裸字引用。 – daxim