Tôi muốn sử dụng "regex được biên dịch" (ý tôi là: biểu thức ở dạng qr/../
) làm khóa cho cấu trúc băm.nhận ra "loại" của các khóa băm
Để phân biệt giữa chuỗi không đổi và các regexes khi lặp qua khóa băm, tôi đã cố gắng sử dụng ref()
hoặc is_regexp()
, nhưng trước đây trả về chuỗi rỗng và chuỗi sau không hoạt động. Tôi sợ tôi đang thiếu một cái gì đó cơ bản về Perl refs vs vô hướng.
Ngoài ra, giải pháp của tôi có vẻ hoạt động. Dù sao có quá xấu không? Bất kỳ đề xuất thay thế nào đều được chào đón.
Một số mã để hiểu ref()
chức năng:
my $regex = qr/foo/;
printf "ref(\$regex): %s \n", ref($regex);
printf "is_regexp(\$regex): %d \n", is_regexp($regex);
# ref($regex): Regexp
# is_regexp($regex): 1
my $scalar = 3;
printf "ref(\$scalar): [%s] \n", ref($scalar);
# ref($scalar): []
my %my_hash = ('name', 'Becky', 'age', 23);
for my $k (keys %my_hash) {
printf "%s [%s] -> %s [%s] \n", $k, ref($k), $my_hash{$k}, ref($my_hash{$k});
}
# name [] -> Becky []
# age [] -> 23 []
Khóa trong băm là chuỗi. 'ref' sẽ luôn trả về' undef' cho những cái đó. Nếu bạn sử dụng bất cứ thứ gì làm khóa không phải là một chuỗi, nó sẽ được chuyển thành chuỗi. – Qtax