关于PERL编程的问题??

znfnft 2002-10-24 03:19:15
在看很多原代码的时候,都有这么一段,use strict,不知道是什么意思啊????
还有就是,很多变量前面都加了my,不知道是什么意思啊??????

谢谢!
...全文
112 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsingson 2002-10-30
  • 打赏
  • 举报
回复
因为perl没有namespace!!!!!!!!!!!!!!!!!!


呵呵,太小看 perl 了吧?



JAPL 是高手,有时间我们聊聊???



---------------------------------欢迎访问 perlchina.org

JAPL 2002-10-26
  • 打赏
  • 举报
回复
#!/usr/bin/perl -w
use strict;

-w == "use warnings;"
这两行是写 perl 程序*强烈*推荐要的.可以省掉很多时间去 debug.

use strict 会迫使你使用 my 来声明变量,而且不允许 symbolic derefering。你应该使用 my 在任何你的 perl 程序,除非你知道你在做什么。。 你该运行 perldoc strict 来看看。 我不打算把这里写成各 tutorial..

-w 可以检查到没有用到的 变量,以及有可能出现的 输入错误。


use warnings;
$aa1 = 4;
print $a1;

错误信息
Name "main::a1" used only once: possible typo at -e line 1.
Name "main::aa1" used only once: possible typo at -e line 1.
Use of uninitialized value in print at -e line 1.
$a1 没有赋值 而且 $aa1 只用了一次。这里 perl 还提醒你是不是你的输入有问题(有可能要做的是 print $aa1 ) .
JAPL 2002-10-26
  • 打赏
  • 举报
回复
#!/usr/bin/perl -w
use strict;

-w == "use warnings;"
这两行是写 perl 程序*强烈*推荐要的.可以省掉很多时间去 debug.

use strict 会迫使你使用 my 来声明变量,而且不允许 symbolic derefering。你应该使用 my 在任何你的 perl 程序,除非你知道你在做什么。。 你该运行 perldoc strict 来看看。 我不打算把这里写成各 tutorial..

-w 可以检查到没有用到的 变量,以及有可能出现的 输入错误。


use warnings;
$aa1 = 4;
print $a1;

错误信息
Name "main::a1" used only once: possible typo at -e line 1.
Name "main::aa1" used only once: possible typo at -e line 1.
Use of uninitialized value in print at -e line 1.
$a1 没有赋值 而且 $aa1 只用了一次。这里 perl 还提醒你是不是你的输入有问题(有可能要做的是 print $aa1 ) .
JAPL 2002-10-26
  • 打赏
  • 举报
回复
#!/usr/bin/perl -w
use strict;

-w == "use warnings;"
这两行是写 perl 程序*强烈*推荐要的.可以省掉很多时间去 debug.

use strict 会迫使你使用 my 来声明变量,而且不允许 symbolic derefering。你应该使用 my 在任何你的 perl 程序,除非你知道你在做什么。。 你该运行 perldoc strict 来看看。 我不打算把这里写成各 tutorial..

-w 可以检查到没有用到的 变量,以及有可能出现的 输入错误。


use warnings;
$aa1 = 4;
print $a1;

错误信息
Name "main::a1" used only once: possible typo at -e line 1.
Name "main::aa1" used only once: possible typo at -e line 1.
Use of uninitialized value in print at -e line 1.
$a1 没有赋值 而且 $aa1 只用了一次。这里 perl 还提醒你是不是你的输入有问题(有可能要做的是 print $aa1 ) .
JAPL 2002-10-25
  • 打赏
  • 举报
回复
Errrr! perl 怎么没有 namespace ??

通常有两种。 package 变量,和 Lexical 变量。

package 变量存在于 package 的起始之间,可以把它想成全局变量。一个简单例子

package A;
$a = 5;
package B;

print $a; # 从 package B 以下就是 B 的地盘(说通俗一些 :) $a 没有在
B 里赋值,所以什么都没有显示出来。
print $A::a # 5
这里 package A 里的变量可以通过 $A::a 来获得。如果你的一个 perl 文件里没有设定 package,
$a = 5;
这里缺省的 package 就是 main. 所以你可以用 $main::a 来获得。但一般这个 $main 是省略掉的。
__END__

关于 my,
你可以把它想成 局域变量(不同于 local $a )

如果 你做
my $a = 5;
print $a ; # 5
这里凡是在 my $a .. 的区间里的程序都可以看到 $a 是 5。所以如果你在程序的一开始做 my $a = 5;这样整个程序都可以看到变量 $a.但如果做
{ my $a = 5 }
print $a;
这里 $a 是在 {} 里设定的,所以只有 {} 里才可以看到 $a,所以 print $a 没有结果。
__END__

综合上面两个,
$a = 4;
package A;
$a = 1000;
print $a; # 我们在package A 里,所以 1000
print $main::a # 4 指向 package main 的变量

然而

my $a = 4;
package A;
$a = 1000;
package B;
$a = 10;

现在如果做
print $a; # 显示 10 !
print $A::a # undefined.. 这里虽然 package 改了,但 my $a 存在于整个区间内..所以 package A 里的 x 实际指向那个 lexical 变量 my $x.所以 $A::a 就根本不会赋值。

__END__

推荐 oreilly 的 perl 系列丛书。 www.oreilly.com.cn 就不用我在这里多讲了。 :)




znfnft 2002-10-25
  • 打赏
  • 举报
回复
能不能讲讲use strict的用法,在什么情况下使用比较合适????????

谢谢!!!
PorkPie 2002-10-24
  • 打赏
  • 举报
回复
那是一个语法约束的包。限制对全局变量的声明,句柄的声明等等。主要是防止污染,因为perl没有namespace
squalll 2002-10-24
  • 打赏
  • 举报
回复
我也想知道望大家帮忙
对对,比较来讲我更希望知道my
squalll 2002-10-24
  • 打赏
  • 举报
回复
我也想知道望大家帮忙
对对,比较来讲我更希望知道my

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧