如何在Perl中调用名称为哈希值的子例程?

前端之家收集整理的这篇文章主要介绍了如何在Perl中调用名称为哈希值的子例程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. $cat test.pl
  2. use strict;
  3. use warnings;
  4.  
  5. sub route {
  6. print "hello,world!";
  7. }
  8.  
  9. my %h;
  10. $h{'a'} = 'route';
  11.  
  12. print "1\n";
  13. $h{a};
  14.  
  15. print "2\n";
  16. $h{a}();
  17.  
  18. print "3\n";
  19. "$h{a}".();
  20. $perl test.pl
  21. Useless use of hash element in void context at test.pl line 12.
  22. Useless use of concatenation (.) or string in void context at test.pl line 18.
  23. 1
  24. 2
  25. Can't use string ("route") as a subroutine ref while "strict refs" in use at test.pl line 15.
  26. $

调用route()的正确方法是什么?

解决方法

您正尝试使用$h {a}作为符号引用.并且“使用严格”明确禁止这一点.如果你关闭严格模式,那么你可以这样做:
  1. no strict;
  2. &{$h{a}};

但最好的方法是在哈希中存储子程序的“实际”引用.

  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. sub route {
  7. print "hello,world!";
  8. }
  9.  
  10. my %h;
  11. $h{a} = \&route;
  12.  
  13. $h{a}->();

猜你在找的Perl相关文章