如果你的系统里没有实现 umask(2) 并且你试图限制你自己的权限(也就是说,如果 (EXPR & 0700) > 0),那么你就会触发一个运行时例外。如果你的平台没有实现 umask(2) 并且你不准备限制自己的权限,那么这个函数简单地返回 undef。
undef EXPR
undef
undef 是我们所谓的“未定义值”的缩写。同时,它还是一个永远返回未定义值的函数的名字。我们很高兴能混淆它们俩。
相同的是,如果你给 undef 函数提供一条记录作为它的参数,那么它还可以明确的解除该记录的定义。如果声明了 EXPR 参数,那么它必须是一个左值。因此你可能只能在一个标量数值,整个散列或者数组,一个子过程名字(用 & 前缀),或者一个类型团上这么用,任何和该对象关联的存储空间都将被恢复用于重复使用(不过在大多数操作系统上都不是返回给系统)。undef 函数对大多数特殊变量可能都不会做想你想象的处理。在象 $1 这样的只读变量上使用将抛出一个例外。
undef 函数是一个单目操作符,不是列表操作符,因此你只能每次解除一个东西的定义。下面是一些 undef 作为单目操作符的用法:
ref tied %hash
如果没有参数,undef 只是用做数值:
select(undef, undef, undef, $naptime); return (wantarray ? () : undef) if $they_blew_it; return if $they_blew_it; # 一样的东西
你可以把 undef 用做一个列表赋值中左边的一个占位符,这个时候右边的对应的数值只是简单地抛弃。除此之外,你不能在其他地方拿 undef 做左值:
($a, $b, undef, $c) = &foo; # 忽略返回的第三个数值
同样,不要拿任何东西和 undef 做比较——那样不会按照你想象的方式处理的。它所作的事情只是与 0 或者空字串比较。使用 defined 函数判断一个数值是否定义。
unlink LIST
unlink
这个函数删除一列文件。(注:实际上,在一个 POSIX 文件系统里,它删除指向真实文件目录记录(文件名)。因为一个文件可以从一个或多个目录里引用(链接),该文件不会被删除,直到指向它的最后一个引用被删除。)此函数返回被成功删除的文件名的个数。一些简单的例子:
$count = unlink 'a', 'b', 'c';
unlink @goners;
unlink glob("*.orig");
除非你是超级用户或者给 Perl 使用了 -U 命令行选项,否则 unlink 函数不会删除目录。即使符合这些条件,你也要注意删除一个目录可能回造成对你的文件系统的彻底损坏,应该用 rmdir 代替。
下面是一个带有非常简单的错误检查的 rm 命令:
#!/usr/bin/perl
@cannot = grep {no unlink} @ARGV;
die "$0: could not unlink @cannot\n" if @cannot;
unpack TEMPLATE, EXPR
这个函数是 pack 的逆操作:它根据 TEMPLATE 把一个表示一个数据结构的字串(EXPR)扩展成一列数值并返回那些数值。在标量环境里,它可以用于解包一个数值。这里的 TEMPLATE 有着和 pack 函数里的大多数格式——它声明要解包的数值的顺序和类型。参阅 pack 函数获取有关 TEMPLATE 的详细描述。如果 TEMPLATE 里有非法元素,或者试图跨过 x,X,或者 @ 格式字串的外面,都会抛出例外。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-24.html
大陆迟早要乱的
实力提升才是最关键的
反舰导弹就很被动