鹦鹉,对于 perl 6 意义重大
相当于真正执行二进制代码的虚拟机
如今,鹦鹉已经 release 了
但是很讽刺地,它现在的发展似乎明显超越了 perl 6 的开发进展
不管怎么说,它的正式发布,还是要恭喜的
2009年4月16日星期四
2009年4月14日星期二
perl 参数的 I 和 i
perl 参数的 i 和 I 都可以指定路径 其中 I 指定的是文件夹 i 指定的是 pm 文件 比如 /Test 文件夹下有 Teacher.pl 和 Boy.pm 两个文件 ../ ./ |-Test/ |-Boy.pm |-Teacher.pl 其中 Teacher.pl 调用 Boy.pm 代码 代码如下: #!/cygdrive/c/Perl/bin/perl package Test::Teacher; use strict; use warnings; use Test::Boy; my @eth = Test::Boy::getEverything(); foreach(@eth){ print "out: ".$_."\n"; } #!/cygdrive/c/Perl/bin/perl package Test::Boy; use strict; use warnings; my @everything = 1 .. 9; sub getEverything{ @everything; } 1 假设当前路径为 /cygdrive/e/pl 时可以使用 perl Test/Teacher.pl 注:perl 会从 ./ 下寻找 Test::Boy.pm,也就是相当于 -iTest::Boy 参数 2 假设当前路径为 /cygdrive/e/pl/Test 时 则需要使用 perl -I../ Teacher.pl 注:perl 会从 ../ 寻找 Test::Boy.pm
use Foo::Bar 意味着什么
——摘自 http://wiki.perlchina.org/Simple_module_tutorial
use Foo::Bar
并不意味着在 @INC 的目录中寻找一个叫做Foo::Bar.pm的模块文件。
它的意思是在@INC的目录中寻找一个叫做‘Foo’的“子目录”,
然后在其中找一个叫做“Bar.pm”的“模块”。
现在,如果我们成功"use"了一个模块,
那么我们就可以通过完整的包路径语法
&PACKAGE::FUNCTION
使用这个模块中的所有函数。
当我们说&Foo::Bar::some_func的时候,
我们指的是“包的名字”而不是那个在use中曾使用的包含路径的文件名。
这会允许你可以在一个use过的文件中包含很多包名字。
实际使用中这些名字通常是相同的。
另外,假设 Teacher.pl 在 Test 文件夹同级
../
./
|test/
| |-Boy.pm
|-Teacher.pl
如果要调用 Boy.pm,也要在 Boy.pm 开头的 package 生命中写清
Test::Boy
即:pm 一定要放在 pm 内与包路径相同的文件夹下,并在文件夹外层调用
vim 7.0 也有 tab 页
古人云:vi 是个好东西
vi 的 buffer 是个不太好看的东西——中文真是博大精深,我主要表达的是不容易看清楚的意思
:ls 是个很好用的命令,但不够直观
用户一定要 ls 一下才能看清楚 buffer 里的东西
这样的操作显然违背了 vi 的特色——让人体任何部位的移动尽量减少,哪怕一毫米
于是,vim 7.0 开始支持 tab(标签页)
gvim 下的 tab 更是直观
最简单常用的用法如下:
netrw 中
t 把光标指向的文件在新标签页中打开
通常模式下
:tabnew 打开一个新的标签页
:tabc[lose] 关闭当前的标签页
:tab help 在一个新标签页中打开帮助
:help :tab 在帮助中打开关于标签页内容
:tab help :tab 在新标签页中打开关于新标签页的帮助
其他的,按以上方法查帮助吧
2009年4月13日星期一
perl socket
一个服务端 #!/cygdrive/c/Perl/bin/perl -w use strict; use warnings; use IO::Socket; use Tk; sub sendf{ my $socket=IO::Socket::INET->;new( PeerHost => 'localhost', Protor => "tcp", PeerPort => 3067 ); die "no socket $@ \n" until $socket; print "client created \n"; print $socket "client say: ".shift."\n"; $socket->;flush(); close($socket); } my $mw = MainWindow->;new; $mw->;Button( -text=>"say hello", -command=>sub{sendf("Hello, server!");} )->pack; MainLoop; 一个客户端(只有一个按钮,按一下,就去跟服务器发消息) #!/cygdrive/c/Perl/bin/perl use strict; use warnings; use Tk; use IO::Socket; my $socket = IO::Socket::INET->;new( LocalHost => 'localhost', Proto => "tcp", LocalPort => 3067, Listen => 5 ) or die 'no socket $@ \n'; print "server created \n"; while(my $nsocket = $socket->;accept()){ while(defined (my $buf = <$nsocket>;)) { print "\n$buf"; } } close($socket); print "server finished\n";注意
服务器端 socket 创建时,listen 参数一定要设定,否则不会报错,但服务器不会被 accept() 阻塞
2009年4月11日星期六
sudo
sudo 功能不赘述,修改权限时,用 visudo 很安全——校验文件配置是否正确,如果不正确,在保存退出时就会提示你配置出错位置。
但我还是喜欢真正的vim。修改执行权限可以通过 vim:
vim /etc/sudoers
编辑中,支持别名(alias,跟变量差不多含义)
Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允许执行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3) 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 实际上最终目标是要拼成如下格式
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
配置示例:
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias SQUID = /sbin/shutdown, /bin/rm
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
注意
涉及到路径时最好写绝对路径
每行中间的空格,可以是 tab
保存后不需要重启,或者被修改帐户重新登录之类。直接使用就行
但我还是喜欢真正的vim。修改执行权限可以通过 vim:
vim /etc/sudoers
编辑中,支持别名(alias,跟变量差不多含义)
Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允许执行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3) 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 实际上最终目标是要拼成如下格式
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
配置示例:
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias SQUID = /sbin/shutdown, /bin/rm
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
注意
涉及到路径时最好写绝对路径
每行中间的空格,可以是 tab
保存后不需要重启,或者被修改帐户重新登录之类。直接使用就行
订阅:
博文 (Atom)