鹦鹉,对于 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 内与包路径相同的文件夹下,并在文件夹外层调用
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年2月5日星期四
perl cheatsheet(from perldoc)
下面是个关于 Perl 的 CheatSheet,也就是那种什么也没学的时候就先背下来,以后越学越受用的关键内容
格式……很讨厌,是从 perldoc 搞来的
blogger 的 css 让我搞了半天啊
绝对不做美工,果然要遭报应的……
CONTEXTS SIGILS ARRAYS HASHES
void $scalar whole: @array %hash
scalar @array slice: @array[0, 2] @hash{'a', 'b'}
list %hash element: $array[0] $hash{'a'}
&sub
*glob SCALAR VALUES
number, string, reference, glob, undef
REFERENCES
\ references $$foo[1] aka $foo->[1]
$@%&* dereference $$foo{bar} aka $foo->{bar}
[] anon. arrayref ${$$foo[1]}[2] aka $foo->[1]->[2]
{} anon. hashref ${$$foo[1]}[2] aka $foo->[1][2]
\() list of refs
NUMBERS vs STRINGS LINKS
OPERATOR PRECEDENCE = = perl.plover.com
-> + . search.cpan.org
++ -- == != eq ne cpan.org
** < > <= >= lt gt le ge pm.org
! ~ \ u+ u- <=> cmp tpj.com
=~ !~ perldoc.com
* / % x SYNTAX
+ - . for (LIST) { }, for (a;b;c) { }
<< >> while ( ) { }, until ( ) { }
named uops if ( ) { } elsif ( ) { } else { }
< > <= >= lt gt le ge unless ( ) { } elsif ( ) { } else { }
== != <=> eq ne cmp for equals foreach (ALWAYS)
&
| ^ REGEX METACHARS REGEX MODIFIERS
&& ^ string begin /i case insens.
|| $ str. end (before \n) /m line based ^$
.. ... + one or more /s . includes \n
?: * zero or more /x ign. wh.space
= += -= *= etc. ? zero or one /g global
, => {3,7} repeat in range /o cmpl pat. once
list ops () capture
not (?:) no capture REGEX CHARCLASSES
and [] character class . == [^\n]
or xor | alternation \s == whitespace
\b word boundary \w == word characters
\z string end \d == digits
DO \S, \W and \D negate
use strict; DON'T
use warnings; "$foo" LINKS
my $var; $$variable_name perl.com
open() or die $!; `$userinput` use.perl.org
use Modules; /$userinput/ perl.apache.org
FUNCTION RETURN LISTS
stat localtime caller SPECIAL VARIABLES
0 dev 0 second 0 package $_ default variable
1 ino 1 minute 1 filename $0 program name
2 mode 2 hour 2 line $/ input separator
3 nlink 3 day 3 subroutine $\ output separator
4 uid 4 month-1 4 hasargs $| autoflush
5 gid 5 year-1900 5 wantarray $! sys/libcall error
6 rdev 6 weekday 6 evaltext $@ eval error
7 size 7 yearday 7 is_require $$ process ID
8 atime 8 is_dst 8 hints $. line number
9 mtime 9 bitmask @ARGV command line args
10 ctime just use @INC include paths
11 blksz POSIX:: 3..9 only @_ subroutine args
12 blcks strftime! with EXPR %ENV environment
Perl命令行应用介绍(转)
|
订阅:
博文 (Atom)
zzzzZZZZ