Created
April 10, 2019 06:49
-
-
Save changkun/0bd926e5b9bfcf91a783e4d033feaf41 to your computer and use it in GitHub Desktop.
perl in an hour
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/perl -w | |
| use strict; | |
| use warnings; | |
| # 单行注释 | |
| print('Hello, | |
| $world!\n'); | |
| my $world = "world"; | |
| print "Hello, | |
| $world!\n"; # 会输出分行,支持单双引号 | |
| # 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。 | |
| # 单双引号决定了能否转移 | |
| my $var = << "EOF"; | |
| 还可以这么写文档? | |
| 比如说: world = $world | |
| EOF | |
| print "$var\n"; | |
| =pod 多行注释 | |
| 神奇的设计 | |
| =cut | |
| my @arr=(1,2,3,4); | |
| print @arr; | |
| my %h=( | |
| 'a' => 1, | |
| 'b' => 2 | |
| ); | |
| print %h; | |
| # 转义 | |
| # \\ 反斜线 | |
| # \' 单引号 | |
| # \" 双引号 | |
| # \a 系统响铃 | |
| # \b 退格 | |
| # \f 换页符 | |
| # \n 换行 | |
| # \r 回车 | |
| # \t 水平制表符 | |
| # \v 垂直制表符 | |
| # \0nn 创建八进制格式的数字 | |
| # \xnn 创建十六进制格式的数字 | |
| # \cX 控制字符,x可以是任何字符 | |
| # \u 强制下一个字符为大写 | |
| # \l 强制下一个字符为小写 | |
| # \U 强制将所有字符转换为大写 | |
| # \L 强制将所有的字符转换为小写 | |
| # \Q 将到\E为止的非单词(non-word)字符加上反斜线 | |
| # \E 结束\L、\U、\Q | |
| # 解释器会自动分配匹配的类型空间。 | |
| # 变量使用等号(=)来赋值。 | |
| # 标量 $ 开始, 如$a $b 是两个标量。 | |
| # 数组 @ 开始 , 如 @a @b 是两个数组。要访问数组的变量,可以使用美元符号($)+变量名,并指定下标来访问 | |
| my @ages = (25, 30, 40); | |
| print "\$ages[0] = $ages[0]\n"; | |
| # 哈希 % 开始 , %a %b 是两个哈希。如果要访问哈希值,可以使用 $ + {key} 格式来访问 | |
| my %data = ('google', 45); | |
| print "\$data{'google'} = $data{'google'}\n"; | |
| # 所谓上下文:指的是表达式所在的位置。 | |
| # 上下文是由等号左边的变量类型决定的,等号左边是标量,则是标量上下文,等号左边是列表,则是列表上下文。 | |
| # Perl 解释器会根据上下文来决定变量的类型。 | |
| my @names = ('google', 'changkun'); | |
| my @copy = @names; # 复制数组 | |
| my $size = @names; # 数组赋值给标量,返回数组元素个数 | |
| print "名字为 : @copy\n"; | |
| print "名字数为 : $size\n"; | |
| # 代码中 @names 是一个数组,它应用在了两个不同的上下文中。 | |
| # 第一个将其复制给另外一个数组,所以它输出了数组的所有元素。 | |
| # 第二个我们将数组赋值给一个标量,它返回了数组的元素个数。 | |
| # 其他上下文 | |
| # 标量 − 赋值给一个标量变量,在标量上下文的右侧计算 | |
| # 列表 − 赋值给一个数组或哈希,在列表上下文的右侧计算。 | |
| # 布尔 − 布尔上下文是一个简单的表达式计算,查看是否为 true 或 false。 | |
| # Void − 这种上下文不需要关系返回什么值,一般不需要返回值。 | |
| # 插值 − 这种上下文只发生在引号内。 | |
| # 数字 | |
| my $integer = 200; | |
| my $negative = -300; | |
| my $floating = 200.340; | |
| my $bigfloat = -1.2E-23; | |
| # 八进制 377 , 十进制为 255 | |
| my $octal = 0377; | |
| # 十六进制 FF, 十进制为 255 | |
| my $hexa = 0xff; | |
| print "integer = $integer\n"; | |
| print "negative = $negative\n"; | |
| print "floating = $floating\n"; | |
| print "bigfloat = $bigfloat\n"; | |
| print "octal = $octal\n"; | |
| print "hexa = $hexa\n"; | |
| # 运算 | |
| my $str = "hello" . "world"; # 字符串连接 | |
| my $num = 5 + 10; # 两数相加 | |
| my $mul = 4 * 5; # 两数相乘 | |
| my $mix = $str . $num; # 连接字符串和数字 | |
| print "str = $str\n"; | |
| print "num = $num\n"; | |
| print "mix = $mix\n"; | |
| print <<EOF; | |
| 多行 | |
| 输出 | |
| EOF | |
| # 特殊字符 | |
| print "文件名 ". __FILE__ . "\n"; | |
| print "行号 " . __LINE__ ."\n"; | |
| print "包名 " . __PACKAGE__ ."\n"; | |
| # v 字符串 | |
| # 一个以 v 开头,后面跟着一个或多个用句点分隔的整数,会被当作一个字串文本。 | |
| my $smile = v9786; | |
| my $foo = v102.111.111; | |
| my $martin = v77.97.114.116.105.110; | |
| print "smile = $smile\n"; | |
| print "foo = $foo\n"; | |
| print "martin = $martin\n"; | |
| # 以 qw 开始定义数组。 | |
| my @array = qw/这是 一个 数组/; | |
| print $array[2]; | |
| print "$array[-1]\n"; # 负数,反向读取 | |
| # 数组序号 | |
| my @var_10 = (1..10); | |
| my @var_20 = (10..20); | |
| # my @var_abc = (a..z); # z 和 z 是 barewords(like string),strict mode 下不能使用 | |
| print "@var_10\n"; # 输出 1 到 10 | |
| print "@var_20\n"; # 输出 10 到 20 | |
| # print "@var_abc\n"; # 输出 a 到 z | |
| my $max_index = $#array; | |
| print "最大索引: $max_index\n"; | |
| # 数组操作 | |
| # 创建一个简单是数组 | |
| my @sites = ("google","changkun"); | |
| print "1. \@sites = @sites\n"; | |
| # 在数组结尾添加一个元素 | |
| push(@sites, "baidu"); | |
| print "2. \@sites = @sites\n"; | |
| # 在数组开头添加一个元素 | |
| unshift(@sites, "weibo"); | |
| print "3. \@sites = @sites\n"; | |
| # 删除数组末尾的元素 | |
| pop(@sites); | |
| print "4. \@sites = @sites\n"; | |
| # 移除数组开头的元素 | |
| shift(@sites); | |
| print "5. \@sites = @sites\n"; | |
| # 切割数组 | |
| @sites = qw/google taobao weibo qq facebook 网易/; | |
| my @sites2 = @sites[3,4,5]; | |
| @sites2 = @sites[3..5]; | |
| print "@sites2\n"; | |
| # 替换 | |
| # splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ] | |
| my @nums = (1..20); | |
| print "替换前 - @nums\n"; | |
| splice(@nums, 5, 5, 21..25); | |
| print "替换后 - @nums\n"; | |
| # 字符串替换为数组 | |
| # split [ PATTERN [ , EXPR [ , LIMIT ] ] ] | |
| # PATTERN:分隔符,默认为空格。 | |
| # EXPR:指定字符串数。 | |
| # LIMIT:如果指定该参数,则返回该数组的元素个数。 | |
| # 定义字符串 | |
| my $var_string = "www-runoob-com"; | |
| my $var_names = "google,taobao,weibo"; | |
| # 字符串转为数组 | |
| my @string = split('-', $var_string); | |
| @names = split(',', $var_names); | |
| print "$string[2]\n"; # 输出 com | |
| print "$names[2]\n"; # 输出 weibo | |
| # 连接数组 | |
| # join EXPR, LIST | |
| # EXPR:连接符。 | |
| # LIST:列表或数组。 | |
| # $string1 = join( '-', @string ); | |
| # 排序 | |
| # sort [ SUBROUTINE ] LIST | |
| # SUBROUTINE:指定规则。 | |
| # LIST:列表或数组。 | |
| # @sites = sort(@sites); | |
| # 特殊变量: $[ | |
| # 特殊变量 $[ 表示数组的第一索引值,一般都为 0 , | |
| # 如果我们将 $[ 设置为 1,则数组的第一个索引值即为 1,第二个为 2,以此类推。 | |
| # 不建议使用!!!!! | |
| # 合并 | |
| # 数组的元素是以逗号来分割,我们也可以使用逗号来合并数组 | |
| # @numbers = (1,3,(4,5,6)); | |
| # @odd = (1,3,5); | |
| # @even = (2, 4, 6); | |
| # @numbers = (@odd, @even); | |
| $var = 10; | |
| my $r = \$var; | |
| if (ref($r) == 'SCALAR') { | |
| print 'YES' | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment