sub numstrcmp ($$) : locked {
my ($a, %b) = @_;
return $a <=> $b || $a cmp %b;
}
有关属性列表和它们的操作的细节,请参阅第三十一章里的 attributes 用法。又见第六章和第八章的“匿名子过程”。
substr EXPR, OFFSET, LENGTH, REPLACEMENT
substr EXPR, OFFSET, LENGTH
substr EXPR, OFFSET
这个函数从 EXPR 给出的字串中抽取一个子字串然后返回它。这个子字串是从字串前面 OFFSET 个字符的位置开始抽取的。(注意:如果你曾经修改了 $[,那么字串的开头就不再是 0 了,不过因为你没有修改过 $[,所以它的开头还是 0。)如果 OFFSET 是负数,那么子字串是从字串后面数这么多偏移量位置开始的。如果省略了 LENGTH,那么把从该位置到字串结尾的东西都抽取出来。如果 LENGTH 是负数,那么该长度是当作在字串尾部剩余那么多字符来理解的。否则,LENGTH 表示要抽取的子字串的长度,通常就是你想要的东西。
你可以把 substr 当作一个左值(可以给之赋值的东西)来用,这个时候 EXPR 也必须是一个合法的左值。如果你给你的子字串赋予比它短的东西,那么该字串将收缩,而如果你给它赋予比它长的东西,那么它会变长。要想保持该字串长度一致,你可能需要用 sprintf 或者 x 操作符填充或者截断你的数值。如果你试图给一个跨过该字串尾部的未分配区域赋值,那么 substr 就会抛出一个例外。
在 $_ 的当前值前面增加字串“Larry”,用:
substr($var, 0, 0) = "Larry";
替换 $_ 的第一个字符为“Moe”,用:
substr($var, 0, 1) = "Moe";
最后,把 $var 的最后一个字符换成“Curly”,用:
substr($var, -1) = "Curly";
把 substr 当作左值使用的另外一个方面就是声明 REPLACEMENT 字串作为其第四个参数。这样就允许你替换 EXPR 的某部分并且返回在一次操作之前的东西,就好象你用 splice 实现的功能那样。下面一个例子也是把 $var 的最后一个字符替换成“Curly”,并且把那个被替换的字符放到 $oldstr 里:
$oldstr = substr($var, -1, 1, "Curly");
你不一定只是在赋值语句中使用 substr 作为左值。下面的代码把任何空格替换成句点,但是只替换字串中的最后十个字符:
substr($var, -10) =~ s/ /./g;
symlink OLDNAME, NEWNAME
这个函数创建一个新的文件,该文件是是指向一个旧文件的符号链接。此函数成功时返回真,否则返回假。在那些不支持符号链接的系统上,它在运行时抛出一个例外。要想检查这个例外,你可以用 eval 捕获所有可能的错误:
$can_symlink = eval { symlink("", ""); 1 };
或者使用 Config 模块。要注意的是如果你提供了一个相对符号链接,那么它会被解释成相对于该符号链接本身的路径,而不是相对于你的当前工作目录。
又见本章早些时候的 link 和 readlink。
syscall LIST
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-16.html
试探
必须给他弄沉