+ -
当前位置:首页 → 问答吧 → perl 这里为什么要加代码块?

perl 这里为什么要加代码块?

时间:2011-01-28

来源:互联网

  1. #!/usr/bin/perl
  2. use warnings;
  3. { package Grandpa;
  4.   $name = "Gramps";
  5.   sub greetme {
  6.         print "Hi $Child::name I'm your $name from package Grandpa.\n";
  7.         }
  8. }

  9. { package Parent;
  10. }



  11. { package Child;
  12.   $name = "Baby";
  13.   print "Hi I'm $name in the Child Package here.\n";
  14.   Parent->greetme();
  15. }

  16. package UNIVERSAL;
  17. sub AUTOLOAD {
  18.         print "The UNIVERSAL lookup package.\n";
  19.         Grandpa->greetme();
  20. }
复制代码
这么在包的都定义在代码块中,package的范围不是到下一次package或则文件结束吗? 去掉代码块结果是一样的
请问这里为何要加上代码块啊?
加上use strict;后出现如下错误:
  1. Variable "$name" is not imported at ./a line 17.
  2. Variable "$name" is not imported at ./a line 18.
  3. Global symbol "$name" requires explicit package name at ./a line 5.
  4. Global symbol "$name" requires explicit package name at ./a line 7.
  5. Global symbol "$name" requires explicit package name at ./a line 17.
  6. Global symbol "$name" requires explicit package name at ./a line 18.
  7. Execution of ./a aborted due to compilation errors.
复制代码
小弟感觉已经声明包了 为何还要加明确的包呢? 小弟是初学者。。。望大侠帮忙 谢了

作者: zzy7186   发布时间: 2011-01-28



QUOTE:
# { package Child;
#   $name = "Baby";
#   print "Hi I'm $name in the Child Package here.\n";
#   Parent->greetme();
# }



这里代码块不是必需的,其作用是让变量在作用域外自动失效。
良好的实践:
(1)去掉这个block;
(2)用my声明变量;
(3)加上use strict。

作者: zuerrong   发布时间: 2011-01-28

回复 zuerrong


    Thank you very much !!

作者: zzy7186   发布时间: 2011-01-28

回复 zuerrong


    还有一个吧,可以goto

作者: wtuter   发布时间: 2011-01-28