[Chinese-commits] [manpages-zh] 46/131: fix
Boyuan Yang
hosiet-guest at moszumanska.debian.org
Tue Dec 13 19:59:39 UTC 2016
This is an automated email from the git hooks/post-receive script.
hosiet-guest pushed a commit to branch master
in repository manpages-zh.
commit bf2516132512b0550ea7e9622440774a4ded987a
Author: LI Daobing <lidaobing at gmail.com>
Date: Fri Feb 29 19:57:54 2008 +0800
fix
---
src/man7/perldata.7 | 442 +++++++++++++++++++++++++++++++-------------------
src/man7/suffix.7 | 397 ++++++++++++++++++++++-----------------------
src/mann/memory.3tcl | 19 +--
src/mann/safe.3tcl | 17 +-
src/mann/tclvars.3tcl | 45 +++--
5 files changed, 515 insertions(+), 405 deletions(-)
diff --git a/src/man7/perldata.7 b/src/man7/perldata.7
index d96ec9a..8383cc7 100644
--- a/src/man7/perldata.7
+++ b/src/man7/perldata.7
@@ -2,220 +2,236 @@
.\"
.\" Standard preamble:
.\" ========================================================================
-.de Sh\" Subsection heading
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp\" Vertical space (when we can't use .PP)
-.if t .sp .5v
-.if n .sp
-..
-.de Vb\" Begin verbatim text
-.ft CW
-.nf
-.ne\\$1
-..
-.de Ve\" End verbatim text
-.ft R
-.fi
-..
-.\" Set up some character translations and predefined strings. \*(-- will
-.\" give an unbreakable dash,\*(PI will give pi,\*(L" will give a left
-.\" double quote, and\*(R" will give a right double quote. | will give a
-.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
-.\" do unbreakable dashes and therefore won't be available. \*(C` and\*(C'
-.\" expand to `' in nroff, nothing in troff, for use with C<>.
-.tr \(*W-|\(bv\*(Tr
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.ie n\{\
-. ds --\(*W-
-. ds PI pi
-. if (\n(.H=4u)&(1m=24u) .ds --\(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-. if (\n(.H=4u)&(1m=20u) .ds --\(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-. ds L" ""
-. ds R" ""
-. ds C` ""
-. ds C' ""
-'br\}
-.el\{\
-. ds --\|\(em\|
-. ds PI\(*p
-. ds L" ``
-. ds R" ''
-'br\}
-.\"
-.\" If the F register is turned on, we'll generate index entries on stderr for
-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
-.\" entries marked with X<> in POD. Of course, you'll have to process the
-.\" output yourself in some meaningful fashion.
-.if\nF\{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
-..
-. nr % 0
-. rr F
-.\}
-.\"
-.\" For nroff, turn off justification. Always turn off hyphenation; it makes
-.\" way too many mistakes in technical documents.
-.hy 0
-.if n .na
-.\"
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
-.\" Fear. Run. Save yourself. No user-serviceable parts.
-. \" fudge factors for nroff and troff
-.if n\{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[\f1
-. ds #]\fP
-.\}
-.if t\{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[\&
-. ds #]\&
-.\}
-. \" simple accents for nroff and troff
-.if n\{\
-. ds '\&
-. ds `\&
-. ds ^\&
-. ds ,\&
-. ds ~ ~
-. ds /
-.\}
-.if t\{\
-. ds '\\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds `\\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^\\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds ,\\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~\\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds /\\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds :\\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8\h'\*(#H'\(*b\h'-\*(#H'
-.ds o\\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d-\h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th\*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th\*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~\\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^\\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if\n(.H>23 .if\n(.V>19\
-\{\
-. ds : e
-. ds 8 ss
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th\o'bp'
-. ds Th\o'LP'
-. ds ae ae
-. ds Ae AE
-.\}
-.rm #[ #] #H #V #F C
-.\" ========================================================================
-.\"
-.IX Title "PERLDATA 1"
+.\".de Sh\" Subsection heading
+.\".br
+.\".if t .Sp
+.\".ne 5
+.\".PP
+.\"\fB\\$1\fR
+.\".PP
+.\"..
+.\".de Sp\" Vertical space (when we can't use .PP)
+.\".if t .sp .5v
+.\".if n .sp
+.\"..
+.\".de Vb\" Begin verbatim text
+.\".ft CW
+.\".nf
+.\".ne\\$1
+.\"..
+.\".de Ve\" End verbatim text
+.\".ft R
+.\".fi
+.\"..
+.\".\" Set up some character translations and predefined strings. \*(-- will
+.\".\" give an unbreakable dash,\*(PI will give pi,\*(L" will give a left
+.\".\" double quote, and\*(R" will give a right double quote. | will give a
+.\".\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
+.\".\" do unbreakable dashes and therefore won't be available. \*(C` and\*(C'
+.\".\" expand to `' in nroff, nothing in troff, for use with C<>.
+.\".tr \(*W-|\(bv\*(Tr
+.\".ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.\".ie n\{\
+.\". ds --\(*W-
+.\". ds PI pi
+.\". if (\n(.H=4u)&(1m=24u) .ds --\(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.\". if (\n(.H=4u)&(1m=20u) .ds --\(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.\". ds L" ""
+.\". ds R" ""
+.\". ds C` ""
+.\". ds C' ""
+.\"'br\}
+.\".el\{\
+.\". ds --\|\(em\|
+.\". ds PI\(*p
+.\". ds L" ``
+.\". ds R" ''
+.\"'br\}
+.\".\"
+.\".\" If the F register is turned on, we'll generate index entries on stderr for
+.\".\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\".\" entries marked with X<> in POD. Of course, you'll have to process the
+.\".\" output yourself in some meaningful fashion.
+.\".if\nF\{\
+.\". de IX
+.\". tm Index:\\$1\t\\n%\t"\\$2"
+.\"..
+.\". nr % 0
+.\". rr F
+.\".\}
+.\".\"
+.\".\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\".\" way too many mistakes in technical documents.
+.\".hy 0
+.\".if n .na
+.\".\"
+.\".\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\".\" Fear. Run. Save yourself. No user-serviceable parts.
+.\". \" fudge factors for nroff and troff
+.\".if n\{\
+.\". ds #H 0
+.\". ds #V .8m
+.\". ds #F .3m
+.\". ds #[\f1
+.\". ds #]\fP
+.\".\}
+.\".if t\{\
+.\". ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.\". ds #V .6m
+.\". ds #F 0
+.\". ds #[\&
+.\". ds #]\&
+.\".\}
+.\". \" simple accents for nroff and troff
+.\".if n\{\
+.\". ds '\&
+.\". ds `\&
+.\". ds ^\&
+.\". ds ,\&
+.\". ds ~ ~
+.\". ds /
+.\".\}
+.\".if t\{\
+.\". ds '\\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.\". ds `\\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.\". ds ^\\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.\". ds ,\\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.\". ds ~\\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.\". ds /\\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\".\}
+.\". \" troff and (daisy-wheel) nroff accents
+.\".ds :\\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.\".ds 8\h'\*(#H'\(*b\h'-\*(#H'
+.\".ds o\\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.\".ds d-\h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.\".ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.\".ds th\*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.\".ds Th\*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.\".ds ae a\h'-(\w'a'u*4/10)'e
+.\".ds Ae A\h'-(\w'A'u*4/10)'E
+.\". \" corrections for vroff
+.\".if v .ds ~\\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.\".if v .ds ^\\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.\". \" for low resolution devices (crt and lpr)
+.\".if\n(.H>23 .if\n(.V>19\
+.\"\{\
+.\". ds : e
+.\". ds 8 ss
+.\". ds o a
+.\". ds d- d\h'-1'\(ga
+.\". ds D- D\h'-1'\(hy
+.\". ds th\o'bp'
+.\". ds Th\o'LP'
+.\". ds ae ae
+.\". ds Ae AE
+.\".\}
+.\".rm #[ #] #H #V #F C
+.\".\" ========================================================================
+.\".\"
+.\".IX Title "PERLDATA 1"
.TH PERLDATA 7 "2003-11-25" "perl v5.8.3" "Perl Programmers Reference Guide"
.SH "NAME"
perldata\- Perl 数据类型
.SH "DESCRIPTION 描述"
.IX Header "DESCRIPTION"
-.Sh "Variable names 变量名"
+.SS "Variable names 变量名"
.IX Subsection "Variable names"
Perl 有三种内建的数据类型:标量,数组和关联数组(即\*(L"哈希表,hash\*(R")。数组以数字为索引,通常以0开始,升序排列。哈希表以与值相关联的字符串为索引,内部排列是无序的。
.PP
-值通常通过一个变量名(或变量名的引用)来引用。变量名的前缀字符显示了值的数据类型。其余部分指明了引用的是哪一个特定的值。通常变量名是一个唯一的标识符,以字母或下划线开始,包括字母、下划线和数字。某些情况下,也可以是以\f(CW\*(C`::\*(C'\fR 分隔的一串标识符(或者是过时的\f(CW\*(C`'\*(C'\fR);除了最后一个,其它都是包名,用来定位最后一个标识符所在的位置(详情参见 perlmod 中的 Packages)。可以用一个简单的标识符来替代它,利用引用就可以。下文有详述,也可参见 perlref .
+值通常通过一个变量名(或变量名的引用)来引用。变量名的前缀字符显示了值的数据类型。其余部分指明了引用的是哪一个特定的值。通常变量名是一个唯一的标识符,以字母或下划线开始,包括字母、下划线和数字。某些情况下,也可以是以\*(C`::\*(C'\fR 分隔的一串标识符(或者是过时的\*(C`'\*(C'\fR);除了最后一个,其它都是包名,用来定位最后一个标识符所在的位置(详情参见 perlmod 中的 Packages)。可以用一个简单的标识符来替代它,利用引用就可以。下文有详述,也可参见 perlref .
.PP
-Perl 也有内建的变量,其名称不遵循这一规则。它们名称古怪,这样可以避免与你的变量名冲突。模式匹配中被匹配到的字符串是以\f(CW\*(C`$\*(C'\fR 加一个数字的变量名来存放的(参见 the perlop manpage 和 the perlre manpage)。 另外,还有几个使你可以介入perl 内部工作的特殊变量,其名称中包含标点和控制字符(参见 perlvar )
+Perl 也有内建的变量,其名称不遵循这一规则。它们名称古怪,这样可以避免与你的变量名冲突。模式匹配中被匹配到的字符串是以\*(C`$\*(C'\fR 加一个数字的变量名来存放的(参见 the perlop manpage 和 the perlre manpage)。 另外,还有几个使你可以介入perl 内部工作的特殊变量,其名称中包含标点和控制字符(参见 perlvar )
.PP
-标量以 '$'开始, 即使它是数组或哈希的元素也是如此。可以把 '$' 理解为‘s' ,表示scalar(标量)。(译者注:此处根据有关文档,做了改动,下面的@处也是这样)
+标量以 '$'开始, 即使它是数组或哈希的元素也是如此。可以把 '$' 理解为`s'
+,表示scalar(标量)。(译者注:此处根据有关文档,做了改动,下面的@处也
+是这样)
.PP
+.nf
.Vb 4
\& $days # 简单标量 "days"
\& $days[28] # 数组 @days的第29个元素
-\& $days{'Feb'} # 哈希 %days的 ‘Feb‘ 所对应的值
+\& $days{'Feb'} # 哈希 %days的 `Feb' 所对应的值
\& $#days # 数组 @days的最后一个元素的索引值
.Ve
+.fi
.PP
-整个数组(或数组和哈希的局部)以 '@'开始, 它类似英文中的\*(L"these\*(R" 或\*(L"those\*(R" (这些……那些……),表示期望有多个值。
+整个数组(或数组和哈希的局部)以 '@'开始, 它类似英文中的\[lq]these\[rq]
+或\[lq]those\[rq] (这些...那些...),表示期望有多个值。
.PP
+.nf
.Vb 3
\& @days # ($days[0], $days[1],... $days[n])
\& @days[3,4,5] # 即 ($days[3],$days[4],$days[5])
\& @days{'a','c'} # 即 ($days{'a'},$days{'c'})
.Ve
+.fi
.PP
整个哈希以 '%' 开始:
.PP
+.nf
.Vb 1
\& %days # (key1, val1, key2, val2 ...)
.Ve
+.fi
.PP
另外,子程序以'&'来表示, 但有时在不引起误解的情况下也可以不用, 就象\*(L"do\*(R" 在英语中常常省略一样。 符号表项以 '*' 作为开始字符, 不过你现在还不用关心这个 (if ever ;-)
.PP
每一种数据类型都有它自己的名字空间,常量标识符也一样。这意味着你可以使用
同一个名字来命名标量、数组、哈希、文件句柄、目录句柄、子程序、格式或标签。
-即\f(CW$foo\fR 和\f(CW at foo\fR 是不同的变量。也即意味着\f(CW$foo[1]\fR 是
-\f(CW at foo\fR 的一部分, 而不是\f(CW$foo\f 的一部分. 这看来有些怪异,不过很
+即$foo\fR 和@foo\fR 是不同的变量。也即意味着$foo[1]\fR 是
+ at foo\fR 的一部分, 而不是$foo\fR的一部分. 这看来有些怪异,不过很
正常,因为它本来就怪异。
.PP
因为变量名以 '$', '@', 或 '%'开始, 保留词对变量没有什麽影响。保留词影响
的是标签和文件句柄,因为它们不是以特殊字符前缀开始的。你不能用\*(L"log\*(R"
来命名文件句柄,因为它是保留词(提示:你可以用
-\f(CW\*(C`open(LOG,'logfile')\*(C'\fR 而不是
-\f(CW\*(C`open(log,'logfile')\*(C'\fR). 使用大写的文件句柄既增加了可读性,
+\*(C`open(LOG,'logfile')\*(C'\fR 而不是
+\*(C`open(log,'logfile')\*(C'\fR). 使用大写的文件句柄既增加了可读性,
又减少了冲突的发生。大小写是有意义的\-\-\*(L"\s-1FOO\s0\*(R",\*(L"Foo\*(R",
和\*(L"foo\*(R" 是不同的名称。以字母或下划线开始的名称可以包含数字和下划线。
.PP
可以用一个返回相关引用的表达式来替换这样的变量名。参见 perlref
.PP
以数字开始的变量名只能包含数字。不是以字母、下划线或数字开始的变量名只能
-含有一个字符,如:\f(CW$%\fR 或\f(CW$$\fR. (大部分这样的变量都有特殊的意
-义。例如,\f(CW$$\fR 是当前进程的id。)
-.Sh "Context 上下文"
+含有一个字符,如:$%\fR 或$$\fR. (大部分这样的变量都有特殊的意
+义。例如,$$\fR 是当前进程的id。)
+.SS "Context 上下文"
.IX Subsection "Context"
-在 Perl 中有时操作或值的意义取决于该操作或值所处的上下文。有两个主要的上下文:列表和标量上下文。相当一部分操作在需要列表的上下文中返回列表,在需要标量的上下文中返回标量。这在有关该操作的文档中会提到。换句话讲,Perl会重载这些操作符。英语中的某些词,如‘fish’和‘sheep’与此类似。
+在 Perl 中有时操作或值的意义取决于该操作或值所处的上下文。有两个主要的上
+下文:列表和标量上下文。相当一部分操作在需要列表的上下文中返回列表,在需
+要标量的上下文中返回标量。这在有关该操作的文档中会提到。换句话讲,Perl会
+重载这些操作符。英语中的某些词,如`fish'和`sheep'与此类似。
.PP
操作可以根据不同的上下文返回不同的值。例如,如果这样写:
.PP
+.nf
.Vb 1
\& int( <STDIN> )
.Ve
+.fi
.PP
integer 操作提供标量上下文给 <> 操作符, <> 会从STDIN 读入一行返回给 integer 操作,然后它返回其中的整型量。但如果你这样写:
.PP
+.nf
.Vb 1
\& sort( <STDIN> )
.Ve
+.fi
.PP
sort操作提供列表上下文给<>, <>会读入STDIN中的每一行直到结束,然后将其传递给sort,sort然后将其排序输出。
.PP
赋值比较特殊,左侧的参数决定了右侧的参数的上下文。赋值给标量,则右侧参数的上下文是标量上下文;赋值给数组或哈希,则右侧参数的上下文是列表上下文。赋值给列表(或片段,其实也是列表),右侧的上下文也是列表上下文。
.PP
-当你使用\f(CW\*(C`use warnings\*(C'\fR 编译指示或 Perl 的\fB\-w\fR 参数时,
+当你使用\*(C`use warnings\*(C'\fR 编译指示或 Perl 的\fB\-w\fR 参数时,
你可能会看到这样的警告:在\*(L"无效的上下文,void context\*(R" 中使用了常量
-或函数。无效上下文的意思是值被丢弃不用,比如只包含有\f(CW\*(C`"fred";
-\*(C'\fR 的语句; 或是\f(CW\*(C`getpwuid(0);\*(C'\fR;. 在要求列表上下文的函数
+或函数。无效上下文的意思是值被丢弃不用,比如只包含有\*(C`"fred";
+\*(C'\fR 的语句; 或是\*(C`getpwuid(0);\*(C'\fR;. 在要求列表上下文的函数
被标量上下文环境调用时,也会出现这个警告.
.PP
用户定义的子程序可能会需要查看上下文是无效,标量,还是列表。不过,大多数并
不需要这么做。因为标量和列表会自动插入到一个列表中。参见 perlfunc 中的
\*(L"wantarray\*(R" 以了解如何辨明你的函数调用时的上下文。
-.Sh "Scalar values 标量"
+.SS "Scalar values 标量"
.IX Subsection "Scalar values"
Perl 中的所有数据都是标量, 标量的数组,标量的哈希. 标量可以是三种不同的值: 数字, 字符(串), 引用. 通常, 不同值之间的转换是透明的. 虽然一个标量不可能有多个值, 但是它可以是一个包含多个值的数组或哈希的引用.
.PP
@@ -227,14 +243,17 @@ Perl 中的所有数据都是标量, 标量的数组,标量的哈希. 标量可
.PP
要弄清楚一个字符串是否是有效的非0数字,只要看它是不是数字0和字母\*(L"0\*(R" 就足够了(不过这在使用-w参数时,会显示警告). 因为非数字的字符串被看作0, 与awk中相似:
.PP
+.nf
.Vb 3
\& if ($str == 0 && $str ne "0") {
\& warn "That doesn't look like a number";
\& }
.Ve
+.fi
.PP
-这种方法可能是最好的,因为如若不然你不会正确对待\s-1IEEE\s0 的注释,比如\f(CW\*(C`NaN\*(C'\fR 和无穷大. 别的时候, 你可能更愿意用\fIPOSIX::strtod()\fR 函数或是正则表达式来检测字符串是否能用做数字(参见perlre).
+这种方法可能是最好的,因为如若不然你不会正确对待\s-1IEEE\s0 的注释,比如\*(C`NaN\*(C'\fR 和无穷大. 别的时候, 你可能更愿意用\fIPOSIX::strtod()\fR 函数或是正则表达式来检测字符串是否能用做数字(参见perlre).
.PP
+.nf
.Vb 8
\& warn "has nondigits" if /\eD/;
\& warn "not a natural number" unless /^\ed+$/; # rejects -3
@@ -245,45 +264,57 @@ Perl 中的所有数据都是标量, 标量的数组,标量的哈希. 标量可
\& warn "not a C float"
\& unless /^([+-]?)(?=\ed|\e.\ed)\ed*(\e.\ed*)?([Ee]([+-]?\ed+))?$/;
.Ve
+.fi
.PP
数组的长度是标量. 通过$#days你可以知道@days的长度. 技术上讲,这不是数组的长度; 而是最后一个元素的下标,因为第一个元素的下标是0. 对$#days 赋值会改变数组的长度. 以这种方式减少数组的话, 会破坏其中的值, 再增加其长度也不能恢复. (Perl 4中是可以的, 我们改变了它以确保析构器被及时调用.)
.PP
你可以使用一些小技巧来预扩展一个数组(如果你知道它将会变得很大的话). 可以用给超出数组范围的元素赋值的方法扩展数组. 可以给数组赋值一个空列表以清空数组. 下面语句等价:
.PP
+.nf
.Vb 2
\& @whatever = ();
\& $#whatever = -1;
.Ve
+.fi
.PP
数组处于标量上下文中时, 返回值是数组的长度. (列表在标量上下文中,返回值是列表的最后一个元素,像是C中的逗号操作符, 而内建函数的返回值由它们自己决定.) 以下语句为真:
.PP
+.nf
.Vb 1
\& scalar(@whatever) == $#whatever - $[ + 1;
.Ve
+.fi
.PP
-Perl 5 改变了\f(CW$[\fR 的意义: 不必担心别的程序改变了\f(CW$[\fR 的值. (换言之,不推荐使用\f(CW$[\fR ) 所以,可以写成这样:
+Perl 5 改变了$[\fR 的意义: 不必担心别的程序改变了$[\fR 的值. (换言之,不推荐使用$[\fR ) 所以,可以写成这样:
.PP
+.nf
.Vb 1
\& scalar(@whatever) == $#whatever + 1;
.Ve
+.fi
.PP
有些程序员为了明确起见, 会使用显式的转换:
.PP
+.nf
.Vb 1
\& $element_count = scalar(@whatever);
.Ve
+.fi
.PP
-当哈希处于标量上下文中时, 如果哈希为空, 返回值为假, 如果非空, 返回值为真; 说得更精确些, 返回值是个字符串, 由已经使用的存储段和分配的全部存储段组成,二者之间以斜杠分隔. 这可以用来反映Perl的哈希算法的好坏. 例如, 你的哈希中有10,000个元素,但是\f(CW%HASH\fR 的标量值为\f(CW"1/16"\fR, 则说明仅用到了16个存储段中的一个, 也许10,000个元素都在这一个存储段中. 最好不要发生这种情况.
+当哈希处于标量上下文中时, 如果哈希为空, 返回值为假, 如果非空, 返回值为真; 说得更精确些, 返回值是个字符串, 由已经使用的存储段和分配的全部存储段组成,二者之间以斜杠分隔. 这可以用来反映Perl的哈希算法的好坏. 例如, 你的哈希中有10,000个元素,但是%HASH\fR 的标量值为"1/16"\fR, 则说明仅用到了16个存储段中的一个, 也许10,000个元素都在这一个存储段中. 最好不要发生这种情况.
.PP
你可以预先为哈希分配空间, 这要使用给\fIkeys()\fR 函数赋值的方法来实现. 实际分配的空间是大于所给值的二的幂:
.PP
+.nf
.Vb 1
\& keys(%users) = 1000; # 分配 1024 空间
.Ve
-.Sh "Scalar value constructors 标量数据构造"
+.fi
+.SS "Scalar value constructors 标量数据构造"
.IX Subsection "Scalar value constructors"
数值常量有以下浮点和整数格式:
.PP
+.nf
.Vb 9
\& 12345
\& 12345.67
@@ -295,30 +326,35 @@ Perl 5 改变了\f(CW$[\fR 的意义: 不必担心别的程序改变了\f(CW$[\f
\& 0377 # octal
\& 0b011011 # binary
.Ve
+.fi
.PP
在数字常量中可以在数字间插入下划线来增加可读性。例如,可以三位一组 (Unix 样式的分组,例如 0b110_110_100),或者四位一组 (来表示 nibbles,例如 0b1010_0110),或者其他分组。
.PP
-字符串通常以单引号或双引号括起. 与标准Unix shells中的引号相似: 双引号可以接收转义和变量; 单引号不可以 (除了\f(CW\*(C`\e'\*(C'\fR 和\f(CW\*(C`\e\e\*(C'\fR)). C 样式的转义字符可以用来输入新行,跳格等字符,转义字符的列表可以参见 perlop 中的\*(L"Quote and Quote-like Operators\*(R"
+字符串通常以单引号或双引号括起. 与标准Unix shells中的引号相似: 双引号可以接收转义和变量; 单引号不可以 (除了\*(C`\e'\*(C'\fR 和\*(C`\e\e\*(C'\fR)). C 样式的转义字符可以用来输入新行,跳格等字符,转义字符的列表可以参见 perlop 中的\*(L"Quote and Quote-like Operators\*(R"
.PP
十六进制,八进制,或二进制以字符串形式表示(如:'0xff'),不能自动转换为十进制形式. hex() 和 oct() 函数可以实现转换. 参见 perlfunc 中的 hex 和 oct 了解详情.
.PP
可以在字符串中直接加入新行. 字符串中的变量只能是标量,数组和数组或哈希的片段 (换言之, 以$或@开始, 后跟下标.).
以下语句打印``The price is $\&100.''
.PP
+.nf
.Vb 2
\& $Price = '$100'; # not interpolated
\& print "The price is $Price.\en"; # interpolated
.Ve
+.fi
.PP
-perl 中没有 double interpolation,因此\f(CW$100\fR 保持不变。
+perl 中没有 double interpolation,因此$100\fR 保持不变。
.PP
正如在有些shell中一样, 你可以用花括号括起变量名, 以便区分变量名和其后的字母及下划线. 如果要将一个变量改写为字符串时,必须这样做,以避免与后面的双冒号或单引号连接起来,否则会被当作包名:
.PP
+.nf
.Vb 3
\& $who = "Larry";
\& print PASSWD "${who}::0:0:Superuser:/:/bin/perl\en";
\& print "We use ${who}speak when ${who}'s here.\en";
.Ve
+.fi
.PP
如果没有花括号, Perl会寻找 $whospeak, $who::0, 和 $who's 变量. 后两个是不存在的 who 包中的$0 和 $s.
.PP
@@ -331,65 +367,75 @@ perl 中没有 double interpolation,因此\f(CW$100\fR 保持不变。
not be available after Perl 5.8. The marginal benefits of v\-strings
were greatly outweighed by the potential for Surprise and Confusion.
.PP
-类似\f(CW\*(C`v1.20.300.4000\*(C'\fR 这样的形式被解释为一个字符串. 这种形式称为 v\-strings,提供了更易读的方法来构造字符串,比起\f(CW"\ex{1}\ex{14}\ex{12c}\ex{fa0}"\fR 更加易读. 这在表示 Unicode 字符串时很有用, 在使用字符串比较命令(\f(CW\*(C`cmp\*(C'\fR,\f(CW\*(C`gt\*(C'\fR,\f(CW\*(C`lt\*(C'\fR 等)比较版本号时也非常有用. 如果其中的点号多于两个, 则开始的\f(CW\*(C`v\*(C'\fR 可以省略.
+类似\*(C`v1.20.300.4000\*(C'\fR 这样的形式被解释为一个字符串. 这种形式称为 v\-strings,提供了更易读的方法来构造字符串,比起"\ex{1}\ex{14}\ex{12c}\ex{fa0}"\fR 更加易读. 这在表示 Unicode 字符串时很有用, 在使用字符串比较命令(\*(C`cmp\*(C'\fR,\*(C`gt\*(C'\fR,\*(C`lt\*(C'\fR 等)比较版本号时也非常有用. 如果其中的点号多于两个, 则开始的\*(C`v\*(C'\fR 可以省略.
.PP
+.nf
.Vb 3
\& print v9786; # prints UTF-8 encoded SMILEY, "\ex{263a}"
\& print v102.111.111; # prints "foo"
\& print 102.111.111; # same
.Ve
+.fi
.PP
这种形式可以用于require 和 use 中作版本检查.\*(L"$^V\*(R" 特殊变量中的Perl版本号就是以这种形式保存的. 参见 perlvar 中的\*(L"$^V\*(R"
注意使用 v\-strings 来保存 IPv4 地址是不可移植的,除非同时使用 Socket 包的\fIinet_aton()\fR/\fIinet_ntoa()\fR 函数。
.PP
-注意从 Perl 5.8.1 开始单个数字的 v\-strings (类似\f(CW\*(C`v65\*(C'\fR) 如果在\f(CW\*(C`=>\*(C'\fR 操作符(通常用来从 hash 值中区分开 hash 键) 之前,不是一个 v\-strings,而是解释为字符串 ('v65')。在 Perl 5.6.0 到 Perl 5.8.0 它一直是 v\-strings,但是这样带来了更多混淆和错误而不是优点。多个数字的 v\-strings,类似\f(CW\*(C`v65.66\*(C'\fR 和\f(CW65.66.67\fR,继续总是被当作 v\-strings
+注意从 Perl 5.8.1 开始单个数字的 v\-strings (类似\*(C`v65\*(C'\fR) 如果在\*(C`=>\*(C'\fR 操作符(通常用来从 hash 值中区分开 hash 键) 之前,不是一个 v\-strings,而是解释为字符串 ('v65')。在 Perl 5.6.0 到 Perl 5.8.0 它一直是 v\-strings,但是这样带来了更多混淆和错误而不是优点。多个数字的 v\-strings,类似\*(C`v65.66\*(C'\fR 和65.66.67\fR,继续总是被当作 v\-strings
.PP
\fI特殊常量\fR
.IX Subsection "Special Literals"
.PP
-特殊变量 _\|_FILE_\|_, _\|_LINE_\|_, 和 _\|_PACKAGE_\|_ 代表当前文件名,行号,和包名. 它们只能作为单独的符号来使用; 不能用于字符串中内插. 如果没有当前包(用\f(CW\*(C`package;\*(C'\fR 指令来实现), 则_\|_PACKAGE_\|_ 是一个未定义的值.
+特殊变量 _\|_FILE_\|_, _\|_LINE_\|_, 和 _\|_PACKAGE_\|_ 代表当前文件名,行号,和包名. 它们只能作为单独的符号来使用; 不能用于字符串中内插. 如果没有当前包(用\*(C`package;\*(C'\fR 指令来实现), 则_\|_PACKAGE_\|_ 是一个未定义的值.
.PP
控制字符 ^D 和 ^Z, 以及 _\|_END_\|_ 和 _\|_DATA_\|_ 变量可以表示文件的逻辑结束. 其后的文本被忽略.
.PP
-_\|_DATA_\|_ 之后的文本可以通过文件句柄\f(CW\*(C`PACKNAME::DATA\*(C'\fR 读取,\f(CW\*(C`PACKNAME\*(C'\fR 是 _\|_DATA_\|_ 所在的包的名称. 句柄指向_\|_DATA_\|_ 后面的文本. 读取结束程序会自动关闭该句柄\f(CW\*(C`close DATA\*(C'\fR. 为了与 _\|_DATA_\|_ 还没有出现以前已经存在的程序兼容, _\|_END_\|_ 在顶级脚本中与 _\|_DATA_\|_ 性质相同(在用\f(CW\*(C`require\*(C'\fR 或\f(CW\*(C`do\*(C'\fR 调用时是不同的) 不过可以通过\f(CW\*(C`main::DATA\*(C'\fR 来调用其中的内容.
+_\|_DATA_\|_ 之后的文本可以通过文件句柄\*(C`PACKNAME::DATA\*(C'\fR 读取,\*(C`PACKNAME\*(C'\fR 是 _\|_DATA_\|_ 所在的包的名称. 句柄指向_\|_DATA_\|_ 后面的文本. 读取结束程序会自动关闭该句柄\*(C`close DATA\*(C'\fR. 为了与 _\|_DATA_\|_ 还没有出现以前已经存在的程序兼容, _\|_END_\|_ 在顶级脚本中与 _\|_DATA_\|_ 性质相同(在用\*(C`require\*(C'\fR 或\*(C`do\*(C'\fR 调用时是不同的) 不过可以通过\*(C`main::DATA\*(C'\fR 来调用其中的内容.
.PP
参见 SelfLoader 详细了解 _\|_DATA_\|_, 其中还有例子. 要注意在BEGIN 块中无法读取DATA句柄: 因为BEGIN 块在编译时即被执行, 而此时 _\|_DATA_\|_ (或 _\|_END_\|_) 还未被程序看到.
.PP
\fI裸词\fR
.IX Subsection "Barewords"
.PP
-在文法上没有特殊意义的词语都被看作字符串. 称之为 "裸词". 和文件句柄以及标签一样, 仅包含小写字母的裸词有可能在将来与程序中的保留词发生冲突, 实际上,当你使用\f(CW\*(C`use warnings\*(C'\fR 语句,或是\fB\-w\fR 选项时, Perl会对此提出警告. 一些人可能希望完全禁止这样的词. 如果有如下语句:
+在文法上没有特殊意义的词语都被看作字符串. 称之为 "裸词". 和文件句柄以及标签一样, 仅包含小写字母的裸词有可能在将来与程序中的保留词发生冲突, 实际上,当你使用\*(C`use warnings\*(C'\fR 语句,或是\fB\-w\fR 选项时, Perl会对此提出警告. 一些人可能希望完全禁止这样的词. 如果有如下语句:
.PP
+.nf
.Vb 1
\& use strict 'subs';
.Ve
+.fi
.PP
-那么不能被解释为子程序的裸词会引起编译时错误. 这种限制到块结束时终止. 而内部的块可以撤消这一限制, 用\f(CW\*(C`no strict 'subs'\*(C'\fR
+那么不能被解释为子程序的裸词会引起编译时错误. 这种限制到块结束时终止. 而内部的块可以撤消这一限制, 用\*(C`no strict 'subs'\*(C'\fR
.PP
\fI数组合并分隔符\fR
.IX Subsection "Array Joining Delimiter"
.PP
-数组和序列被合并为双引号引用的字符串时,以变量\f(CW$"\fR 指定的值 (如果指定了\*(L"use English;\*(R" 那么是\f(CW$LIST_SEPARATOR\fR 的值) 作为分隔符,默认是空格。下列语句等价:
+数组和序列被合并为双引号引用的字符串时,以变量$"\fR 指定的值 (如果指定了\*(L"use English;\*(R" 那么是$LIST_SEPARATOR\fR 的值) 作为分隔符,默认是空格。下列语句等价:
.PP
+.nf
.Vb 2
\& $temp = join($", @ARGV);
\& system "echo $temp";
.Ve
+.fi
.PP
+.nf
.Vb 1
\& system "echo @ARGV";
.Ve
+.fi
.PP
-在搜索模式中(在双引号字符串中也是)有一个易混淆之处:\f(CW\*(C`/$foo[bar]/\*(C'\fR 应该是\f(CW\*(C`/${foo}[bar]/\*(C'\fR (\f(CW\*(C`[bar]\*(C'\fR 是正则表达式的字符类) 还是\f(CW\*(C`/${foo[bar]}/\*(C'\fR/ (\f(CW\*(C`[bar]\*(C'\fR 是数组\f(CW at foo\fR 的下标) 呢? 如果\f(CW at foo\fR 不存在, 那很明显它应该是字符类. 如果\f(CW at foo\fR 存在, Perl 会尽力猜测\f(CW\*(C`[bar]\*(C'\fR 的含义, 且它几乎总是对的. 如果它猜错了, 或者你比较偏执, 你可以使用花括号.
+在搜索模式中(在双引号字符串中也是)有一个易混淆之处:\*(C`/$foo[bar]/\*(C'\fR 应该是\*(C`/${foo}[bar]/\*(C'\fR (\*(C`[bar]\*(C'\fR 是正则表达式的字符类) 还是\*(C`/${foo[bar]}/\*(C'\fR/ (\*(C`[bar]\*(C'\fR 是数组@foo\fR 的下标) 呢? 如果@foo\fR 不存在, 那很明显它应该是字符类. 如果@foo\fR 存在, Perl 会尽力猜测\*(C`[bar]\*(C'\fR 的含义, 且它几乎总是对的. 如果它猜错了, 或者你比较偏执, 你可以使用花括号.
.PP
here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-like Operators\*(R"
-.Sh "List value constructors 列表值构造"
+.SS "List value constructors 列表值构造"
.IX Subsection "List value constructors"
列表是用逗号分开的各个值组成的(如果优先级需要的话,外面还要用圆括号包围):
.PP
+.nf
.Vb 1
\& (LIST)
.Ve
+.fi
.PP
在不需要列表的上下文中, 列表的值是最后一个元素的值, 这与C中的逗号操作符类似. 例如:
.PP
@@ -405,13 +451,16 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
.PP
将$bar 的值赋给$foo. 注意, 数组在标量上下文中的值是数组的长度; 下例将3赋给$foo:
.PP
+.nf
.Vb 2
\& @foo = ('cc', '-E', $bar);
\& $foo = @foo; # $foo gets 3
.Ve
+.fi
.PP
列表的最后可以输入逗号, 所以这样也是正确的:
.PP
+.nf
.Vb 5
\& @foo = (
\& 1,
@@ -419,9 +468,11 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& 3,
\& );
.Ve
+.fi
.PP
要将here-document 赋给数组, 一行作为一个元素, 可以这样作:
.PP
+.nf
.Vb 7
\& @sauces = <<End_Lines =~ m/(\eS.*\eS)/g;
\& normal tomato
@@ -431,6 +482,7 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& white wine
\& End_Lines
.Ve
+.fi
.PP
列表会自动插入子列表. 也即, 下例将展开数组,哈希等, 并将其中的每一个元素作为该新列表的一个元素. 数组或哈希失去其原来的身份.列表
.PP
@@ -442,29 +494,37 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
.PP
空列表可以表示为(). 在列表中插入空列表没有意义. ((),(),()) 与()相同. 同样, 内插一个空数组也没有意义.
.PP
-合并的语法表示开和闭括号都是可选的 (除非为表示优先级需要);而列表可以以可选的逗号结束表示列表中的多个逗号是合法的语法。列表\f(CW\*(C`1,,3\*(C'\fR 是两个列表的并置,\f(CW\*(C`1,\*(C'\fR 还有\f(CW3\fR, 第一个以可选的逗号结束。\f(CW\*(C`1,,3\*(C'\fR 是\f(CW\*(C`(1,),(3)\*(C'\fR 也是\f(CW\*(C`1,3\*(C'\fR (类似的,\f(CW\*(C`1,,,3\*(C'\fR 是\f(CW\*(C`(1,),(,),3\*(C'\fR 也是\f(CW\*(C`1,3\*(C'\fR 等等) 不过我们不建议你使用这么混乱的写法
+合并的语法表示开和闭括号都是可选的 (除非为表示优先级需要);而列表可以以可选的逗号结束表示列表中的多个逗号是合法的语法。列表\*(C`1,,3\*(C'\fR 是两个列表的并置,\*(C`1,\*(C'\fR 还有3\fR, 第一个以可选的逗号结束。\*(C`1,,3\*(C'\fR 是\*(C`(1,),(3)\*(C'\fR 也是\*(C`1,3\*(C'\fR (类似的,\*(C`1,,,3\*(C'\fR 是\*(C`(1,),(,),3\*(C'\fR 也是\*(C`1,3\*(C'\fR 等等) 不过我们不建议你使用这么混乱的写法
.PP
列表也可以象数组一样使用下标. 为了避免歧义需要在列表外使用括号. 例如:
.PP
+.nf
.Vb 2
\& # Stat returns list value.
\& $time = (stat($file))[8];
.Ve
+.fi
.PP
+.nf
.Vb 2
\& # SYNTAX ERROR HERE.
\& $time = stat($file)[8]; # OOPS, FORGOT PARENTHESES
.Ve
+.fi
.PP
+.nf
.Vb 2
\& # Find a hex digit.
\& $hexdigit = ('a','b','c','d','e','f')[$digit-10];
.Ve
+.fi
.PP
+.nf
.Vb 2
\& # A "reverse comma operator".
\& return (pop(@foo),pop(@foo))[0];
.Ve
+.fi
.PP
可以给列表赋值, 当然列表中的每个元素必须合法才行:
.PP
@@ -476,7 +536,7 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& ($map{'red'}, $map{'blue'}, $map{'green'}) = (0x00f, 0x0f0, 0xf00);
.Ve
.PP
-特例是可以赋值为\f(CW\*(C`undef\*(C'\fR。当忽略程序的某些返回值时这很有用:
+特例是可以赋值为\*(C`undef\*(C'\fR。当忽略程序的某些返回值时这很有用:
.PP
.Vb 1
\& ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
@@ -484,10 +544,12 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
.PP
列表赋值处于标量上下文中时, 返回值是等号右侧的表达式的元素个数:
.PP
+.nf
.Vb 2
\& $x = (($foo,$bar) = (3,2,1)); # set $x to 3, not 2
\& $x = (($foo,$bar) = f()); # set $x to f()'s return count
.Ve
+.fi
.PP
这在布尔上下文中很方便, 因为多数列表函数在结束时返回空列表, 这时列表赋值会返回0, 被解释为FALSE.
.PP
@@ -497,7 +559,7 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& $count = () = $string =~ /\ed+/g;
.Ve
.PP
-将置\f(CW$count\fR 为\f(CW$string\fR 中找到的数字组数量。这样能行的原因是模式匹配是列表上下文 (因为它被赋予一个空列表),因此返回所有匹配部分的列表。在标量上下文中的列表赋值将它转换为元素的个数 (这里是模式被匹配的数量),然后赋值给\f(CW$count\fR。注意简单地使用
+将置$count\fR 为$string\fR 中找到的数字组数量。这样能行的原因是模式匹配是列表上下文 (因为它被赋予一个空列表),因此返回所有匹配部分的列表。在标量上下文中的列表赋值将它转换为元素的个数 (这里是模式被匹配的数量),然后赋值给$count\fR。注意简单地使用
.PP
.Vb 1
\& $count = $string =~ /\ed+/g;
@@ -507,24 +569,29 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
.PP
最后一个元素可以是数组或哈希:
.PP
+.nf
.Vb 2
\& ($a, $b, @rest) = split;
\& my($a, $b, %rest) = @_;
.Ve
+.fi
.PP
当然可以在任何位置使用数组或哈希, 不过第一个数组或哈希会将所有的值都据为己有, 其它的元素都会变为undefined.这在my() 或 local()中或许有用.
.PP
哈希可以用含有字值对的列表来初始化:
.PP
+.nf
.Vb 2
\& # same as map assignment above
\& %map = ('red',0x00f,'blue',0x0f0,'green',0xf00);
.Ve
+.fi
.PP
列表和数组交互性很强, 哈希则不然. 你可以象使用数组时一样对列表使用下标并不意味着可以象使用哈希一样使用列表. 同样,处于列表中的哈希总是以字值对的形式展开. 因此有时使用引用要更好一些.
.PP
-通常在字值对中使用\f(CW\*(C`=>\*(C'\fR 操作符会更易读.\f(CW\*(C`=>\*(C'\fR 与逗号作用相同, 不过它还有一个作用, 那就是可以使它左侧的对象被解释为字符串\*(-- 如果该对象是裸字的话,将是合法的标识符 (\f(CW\*(C`=>\*(C'\fR 不引用包含双冒号的复合标识符). 这在初始化哈希时棒极了:
+通常在字值对中使用\*(C`=>\*(C'\fR 操作符会更易读.\*(C`=>\*(C'\fR 与逗号作用相同, 不过它还有一个作用, 那就是可以使它左侧的对象被解释为字符串\*(-- 如果该对象是裸字的话,将是合法的标识符 (\*(C`=>\*(C'\fR 不引用包含双冒号的复合标识符). 这在初始化哈希时棒极了:
.PP
+.nf
.Vb 5
\& %map = (
\& red => 0x00f,
@@ -532,9 +599,11 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& green => 0xf00,
\& );
.Ve
+.fi
.PP
或者初始化哈希的引用:
.PP
+.nf
.Vb 5
\& $rec = {
\& witch => 'Mable the Merciless',
@@ -542,9 +611,11 @@ here\-document 的语法已经被移动到 perlop 中的\*(L"Quote and Quote-lik
\& date => '10/31/1776',
\& };
.Ve
+.fi
.PP
or for using call-by-named-parameter to complicated functions:
.PP
+.nf
.Vb 7
\& $field = $query->radio_group(
\& name => 'group_name',
@@ -554,21 +625,25 @@ or for using call-by-named-parameter to complicated functions:
\& labels =>\e%labels
\& );
.Ve
+.fi
.PP
注意哈希初始化时的顺序和输出时的顺序并不一定相同. 要得到顺序的输出可以参见 perlfunc 中的\*(L"sort\*(R"
-.Sh "Subscripts 下标"
+.SS "Subscripts 下标"
.IX Subsection "Subscripts"
-数组可以用一个美元符号,加上它的名字(不包括前导的\f(CW\*(C`@\*(C'\fR),加上方括号和其中包含的下标来取得值。例如:
+数组可以用一个美元符号,加上它的名字(不包括前导的\*(C`@\*(C'\fR),加上方括号和其中包含的下标来取得值。例如:
.PP
+.nf
.Vb 2
\& @myarray = (5, 50, 500, 5000);
\& print "Element Number 2 is", $myarray[2], "\en";
.Ve
+.fi
.PP
-数组下标从 0 开始。负值下标返回从尾部开始数的值。在我们的例子中,\f(CW$myarray[\-1]\fR 将是 5000,\f(CW$myarray[\-2]\fR 是 500。
+数组下标从 0 开始。负值下标返回从尾部开始数的值。在我们的例子中,$myarray[\-1]\fR 将是 5000,$myarray[\-2]\fR 是 500。
.PP
Hash 下标与此类似,但是不使用方括号而是花括号。例如:
.PP
+.nf
.Vb 7
\& %scientists =
\& (
@@ -578,53 +653,63 @@ Hash 下标与此类似,但是不使用方括号而是花括号。例如:
\& "Feynman" => "Richard",
\& );
.Ve
+.fi
.PP
.Vb 1
\& print "Darwin's First Name is ", $scientists{"Darwin"}, "\en";
.Ve
-.Sh "Slices 片段"
+.SS "Slices 片段"
.IX Subsection "Slices"
通常对哈希或数组一次访问一个元素. 也可以使用下标对列表元素进行访问.
.PP
+.nf
.Vb 3
\& $whoami = $ENV{"USER"}; # one element from the hash
\& $parent = $ISA[0]; # one element from the array
\& $dir = (getpwnam("daemon"))[7]; # likewise, but with list
.Ve
+.fi
.PP
片段可以一次访问列表,数组或哈希中的几个元素, 这是通过列表下标来实现的. 这比分别写出每个值要方便一些.
.PP
+.nf
.Vb 4
\& ($him, $her) = @folks[0,-1]; # array slice
\& @them = @folks[0 .. 3]; # array slice
\& ($who, $home) = @ENV{"USER", "HOME"}; # hash slice
\& ($uid, $dir) = (getpwnam("daemon"))[2,7]; # list slice
.Ve
+.fi
.PP
既然可以给列表赋值, 当然也可以哈希或数组的片段赋值.
.PP
+.nf
.Vb 4
\& @days[3..5] = qw/Wed Thu Fri/;
\& @colors{'red','blue','green'}
\& = (0xff0000, 0x0000ff, 0x00ff00);
\& @folks[0, -1] = @folks[-1, 0];
.Ve
+.fi
.PP
上面的操作与下列语句等价:
.PP
+.nf
.Vb 4
\& ($days[3], $days[4], $days[5]) = qw/Wed Thu Fri/;
\& ($colors{'red'}, $colors{'blue'}, $colors{'green'})
\& = (0xff0000, 0x0000ff, 0x00ff00);
\& ($folks[0], $folks[-1]) = ($folks[-1], $folks[0]);
.Ve
+.fi
.PP
-既然改变片段就会改变数组或哈希的原始值, 那么\f(CW\*(C`foreach\*(C'\fR 结构可以部分或全部地改变数组或哈希的值.
+既然改变片段就会改变数组或哈希的原始值, 那么\*(C`foreach\*(C'\fR 结构可以部分或全部地改变数组或哈希的值.
.PP
.Vb 1
\& foreach (@array[ 4 .. 10 ]) { s/peter/paul/ }
.Ve
.PP
+.nf
.Vb 5
\& foreach (@hash{qw[key1 key2]}) {
\& s/^\es+//; # trim leading whitespace
@@ -632,34 +717,41 @@ Hash 下标与此类似,但是不使用方括号而是花括号。例如:
\& s/(\ew+)/\eu\eL$1/g; # "titlecase" words
\& }
.Ve
+.fi
.PP
空列表的片段还是空列表, 因此:
.PP
+.nf
.Vb 3
\& @a = ()[1,0]; # @a has no elements
\& @b = (@a)[0,1]; # @b has no elements
\& @c = (0,1)[2,3]; # @c has no elements
.Ve
+.fi
.PP
但是:
.PP
+.nf
.Vb 2
\& @a = (1)[1,0]; # @a has two elements
\& @b = (1,undef)[1,0,2]; # @b has three elements
.Ve
+.fi
.PP
下例利用了这一特性,当返回空列表时循环终止:
.PP
+.nf
.Vb 3
\& while ( ($home, $user) = (getpwent)[7,0]) {
\& printf "%-8s %s\en", $user, $home;
\& }
.Ve
+.fi
.PP
我们在前面说过, 标量上下文中的列表赋值返回值是右侧的元素个数. 空列表没有元素, 所以当口令文件读完后, 返回值是0而不是2.
.PP
为什么对哈希的片段使用'@'而不是'%'呢. 因为括号的类型(方括号或花括号)决定了它是数组还是哈希. 而数组或哈希的开始字符('$'或'@')表示返回值是单个值还是多个值(列表).
-.Sh "Typeglobs and Filehandles 全局类型和文件句柄"
+.SS "Typeglobs and Filehandles 全局类型和文件句柄"
.IX Subsection "Typeglobs and Filehandles"
Perl 使用叫做 全局类型 的类型来支持整个符号表项. 全局类型的前缀是*, 因为它表示所有的类型. 这在过去通常用来给函数传递数组或哈希的引用, 但是现在有了真正的引用, 这就几乎不需要了.
.PP
@@ -685,14 +777,17 @@ Perl 使用叫做 全局类型 的类型来支持整个符号表项. 全局类
.PP
或者使用真正的引用, 象这样:
.PP
+.nf
.Vb 1
\& $fh =\e*STDOUT;
.Ve
+.fi
.PP
参见 perlsub 有关于间接句柄的多个例子.
.PP
全局类型也是使用local() 创建局部文件句柄的一种方法. 作用范围在当前块之内, 但是可以被传回.例如:
.PP
+.nf
.Vb 7
\& sub newopen {
\& my $path = shift;
@@ -702,11 +797,13 @@ Perl 使用叫做 全局类型 的类型来支持整个符号表项. 全局类
\& }
\& $fh = newopen('/etc/passwd');
.Ve
+.fi
.PP
既然我们有*foo{THING} 这样的记法, 全局类型不再多用于文件句柄,但在从函数传出或向函数传入新的文件句柄时它还是必需的.因为*HANDLE{IO} 只有在HANDLE 已经是文件句柄时才起作用. 换言之, 在建立新符号表项时必须使用 *FH; *foo{THING} 是不行的. 不知道该用谁时, 使用 *FH
.PP
所有能创建文件句柄的函数 (open(), opendir(), pipe(), socketpair(), sysopen(), socket(), 和 accept()) ,在传递给它们的句柄是标量时,会自动创建一个匿名句柄. 这使得象open(my $fh, ...) 和 open(local $fh,...) 这样的结构可以创建一个在超出范围时可以自动关闭的句柄,如果没有另外的对它们的引用的话. 这大大减少了全局类型的使用,当需要打开一个可以到处使用的句柄时, 可以这样做:
.PP
+.nf
.Vb 5
\& sub myopen {
\& open my $fh, "@_"
@@ -714,7 +811,9 @@ Perl 使用叫做 全局类型 的类型来支持整个符号表项. 全局类
\& return $fh;
\& }
.Ve
+.fi
.PP
+.nf
.Vb 5
\& {
\& my $f = myopen("</etc/motd");
@@ -722,8 +821,9 @@ Perl 使用叫做 全局类型 的类型来支持整个符号表项. 全局类
\& # $f implicitly closed here
\& }
.Ve
+.fi
.PP
-注意如果使用了初始化的标量,那么结果会有不同:\f(CW\*(C`my $fh='zzz'; open($fh, ...)\*(C'\fR 与\f(CW\*(C`open( *{'zzz'}, ...)\*(C'\fR 等价。\f(CW\*(C`use strict 'refs'\*(C'\fR 禁止了这样做。
+注意如果使用了初始化的标量,那么结果会有不同:\*(C`my $fh='zzz'; open($fh, ...)\*(C'\fR 与\*(C`open( *{'zzz'}, ...)\*(C'\fR 等价。\*(C`use strict 'refs'\*(C'\fR 禁止了这样做。
.PP
另一个创建匿名句柄的方法是用Symbol 模块或IO::Handle 模块或诸如此类的东西. These modules have the advantage of not hiding different types of the same name during the local(). 在 open() in the perlfunc manpage 的文末有个例子.(译者注:说实话,对匿名句柄我现在也是一头雾水,翻译的不当之处,请高手指出.)
.SH "SEE ALSO 参见"
diff --git a/src/man7/suffix.7 b/src/man7/suffix.7
index 39d0cf0..84923e6 100644
--- a/src/man7/suffix.7
+++ b/src/man7/suffix.7
@@ -33,7 +33,7 @@
.\"
.\" 中文版版权所有 redcandle, Laser www.linuxforum.net 2000
.TH SUFFIXES 7 "April 4, 1996" "Linux" "Linux 程序员手册"
-.SH NAME [命令名]
+.SH NAME
suffixes \- 列出文件后缀。
.SH DESCRIPTION [描述]
文件后缀与文件名之间以点(.)间隔,通常包括一个或多个字母。
@@ -43,205 +43,202 @@ suffixes \- 列出文件后缀。
就是基于文件后缀的。
.PP
下面是 Linux 下常见的文件后缀:
-.TS
- l | l
- _ | _
- lI | l .
- 后缀 文件类型
- ,v RCS(Revision Control System(修改控制系统)) 文件
- - 备份文件。
- .C C++ 源代码文件。
- .F 带 \fBcpp\fP(1) 的 Fortran 源代码或用 freeze 压缩的文件。
- .S 汇编源代码。
- .Y 用 yabba 压缩的文件。
- .Z 用 \fB compress\fR (1) 压缩的文件。
- .[0-9]+gf TeX 普通字体文件
- .[0-9]+pk TeX 打包字体文件
- .[1-9] 相关章节的手册页
- .[1-9][a-z] 包含子章节的手册页
- .a 静态对象代码库
- .ad X 应用程序缺省资源文件。
- .adb Ada 体源文件(校注:懂 Ada 的同志请指正)
- .ads Ada 描述源文件
- .afm PostScript 字体度量
- .al Perl 自动加载文件
- .am \fB automake\fR (1) 输入文件
- .arc \fB arc\fR (1) 档案文件
- .arj \fB arj\fR (1) 档案文件
- .asc PGP ASCII-保护数据
- .asm (GNU) 汇编源代码
- .au Audio 声音文件
- .aux LaTeX 辅助文件
- .avi (msvideo) 电影
- .awk AWK 程序
- .b LILO 启动加载器镜象
- .bak 备份文件
- .bash \fB bash\fR (1) 脚本
- .bb gcc -ftest-coverage 生成的基础块列表数据
- .bbg gcc -ftest-coverage 生成的基础块图形数据
- .bbl BibTeX 输出文件
- .bdf X 字体文件
- .bib TeX 数目数据库,BibTeX 输入文件
- .bm bitmap 源文件
- .bmp bitmap 位图
- .bz2 \fB bzip2\fR (1)的压缩文件
- .c C 源代码
- .cat 信息目录文件
- .cc C++ 源代码
- .cf 配置文件
- .cfg 同上
- .cgi 可以产生 web 页的脚本或程序
- .class Java 已编译文件
- .conf 配置文件
- .config 同上
- .cpp \fI (等价于 .cc) \fR
- .csh \fB csh\fR (1) 脚本
- .cxx \fI (等价于 .cc) \fR
- .dat 数据文件
- .deb Debian 软件包
- .def Modula-2 语言的定义模块的源代码
- .def 其它定义文件
- .desc 用 munpack 解压的邮件信息的初始化部分
- .diff 文件不同之处 (diff(1) 的输出文件)
- .dir dbm 数据库目录文件
- .doc 文档文件
- .dtx LaTeX 包的源文件
- .dvi TeX's 设备无关的输出文件
- .el Emacs-Lisp 源代码
- .elc 编译后的 Emacs-Lisp 文件
- .eps 压缩过的 PostScript
- .f Fortran 源代码
- .f77 Fortran 77 源代码
- .f90 Fortran 90 源代码
- .fas 预编译的 Common-Lisp
- .fi Fortran 包含文件
- .fig FIG 图象文件 (\fB xfig\fR (1)调用)
- .fmt TeX 格式文件
- .gif Compuserve Graphics Image File format(图象文件)
- .gmo GNU 格式信息目录
- .gsf Ghostscript 字体
- .gz 用 \fB gzip\fR (1) 压缩的文件
- .h C 或 C++ 头文件
- .help 帮助文件 \fR
- .hf 等价于 \fI .help\fR
- .hlp 等价于 \fI .help\fR
- .htm 穷人的(有些系统扩展名只能三个字符)\fI .html
- .html WWW 中使用的 HTML 文档
- .hqx 7-位编码的 Macintosh 文件
- .i 预处理过的 C 程序
- .icon 位图源文件
- .idx 超文本或数据库系统用的参考书目或数据索引
- .image 位图源文件
- .in 配置摸板,常用于 GNU Autoconf
- .info Emacs info 浏览器文件
- .info-[0-9]+ info 文件
- .ins LaTeX 打包的用于 docstrip 的安装文件
- .java Java 源代码
- .jpeg Joint Photographic Experts Group format
- .jpg 有些系统扩展名只能三个字符\fI .jpeg \fR
- .kmap \fB lyx\fR (1) 键盘布局
- .l 等价于 \fI .lex\fR 或 \fI .lisp\fR
- .lex \fB lex\fR (1) 或 \fB flex\fR (1) 文件
- .lha lharc 档案文件
- .lib Common-Lisp 库文件
- .lisp Lisp 源代码
- .ln files for use with \fB lint\fR (1)
- .log 日志文件, 多见于 TeX
- .lsm Linux Software Map entry(软件列表?)
- .lsp Common-Lisp 源代码
- .lzh lharc 档案文件
- .m4 \fB m4\fR (1) 源代码
- .mac 宏命令文件
- .man 手册页 (通常是源文件,有些是格式化过的)
- .map map 文件
- .me 使用 me 宏命令包的 Nroff 源文件
- .mf Metafont (Tex 使用的字体) 资源
- .mm \fB groff\fR (1) 的 mm 格式的文件
- .mo 信息目录二进制文件(校注:本地化文件)
- .mod Modula-2 执行模块源代码
- .mov (quicktime) 电影
- .mp Metapost 资源
- .mpe 电影
- .o 对象文件
- .old 旧的或备份文件
- .orig \fB patch\fR (1) 产生的备份或原始文件
- .out 输出文件, 一般是可执行程序(a.out)
- .p Pascal 源代码
- .pag dbm 数据库数据文件
- .patch \fB patch\fR (1) 用的文件的差别文件
- .pbm portable bitmap format(可移植位图格式)
- .pcf X11 字体
- .pdf AdobePortableDataFormat(用Acrobat/\fBacroread\fR或\fBxpdf\fR查看 )
- .perl Perl 源代码
- .pfa PostScript 字体定义文件, ASCII 格式
- .pfb PostScript 字体定义文件, 二进制格式
- .pgm portable greymap format(可移植灰度图格式)
- .pgp PGP 二进制数据
- .ph Perl 头文件
- .pid 存储后台程序信息的文件(e.g. crond.pid)
- .pl TeX 属性列表 或 Perl 库文件
- .pm Perl 模块
- .png Portable Network Graphics file(可移植网络图象文件)
- .po 信息目录资源(校注:本地化资源文件)
- .pod \fB perldoc\fR (1) 文件
- .ppm portable pixmap format(可移植点图格式)
- .pr bitmap source(位图资源)
- .ps PostScript 文件
- .py Python 源代码
- .pyc python 编译后文件
- .qt quicktime movie(电影)
- .r RATFOR 资源 (已过时)
- .rej \fB patch\fR (1) 不能用的补丁
- .rpm RedHat 软件包
- .rtf Rich Text Format file(富文本文件)
- .rules rules for something(规则文件)
- .s assembler source(汇编源代码)
- .sa a.out 共享库的存根库
- .sc \fB sc\fR (1) 电子表格命令
- .sgml SGML 源文件
- .sh \fB sh\fR (1) 脚本
- .shar \fB shar\fR (1) 产生的档案文件
- .so 共享库或动态可载入对象
- .sql SQL 资源
- .sqml SQML 结构或查询程序
- .sty LaTeX 类型文件
- .sym Modula-2 已编译的定义模块
- .tar \fB tar\fR (1) 产生的档案文件
- .tar.Z \fB compress\fR (1) 压缩的tar档案文件
- .tar.bz2 \fB bzip2\fR (1) 压缩的tar档案文件
- .tar.gz \fB gzip\fR (1) 压缩的tar档案文件
- .taz \fB compress\fR (1) 压缩的tar档案文件
- .tex TeX 或 LaTeX 资源
- .texi 等价于 \fI .texinfo\fR
- .texinfo Texinfo 文档资源
- .text 文本文件
- .tfm TeX font metric file
- .tgz \fB gzip\fR (1) 压缩的tar档案文件
- .tif poor man's \fI .tiff(图象) \fR
- .tiff Tagged Image File Format(图象)
- .tk tcl/tk 脚本
- .tmp 临时文件
- .tmpl 临时文件
- .txt 等价于 \fI .text\fR
- .uu 等价于 \fI .uue\fR
- .uue \fB uuencode\fR (1) 编码的二进制文件
- .vf TeX 虚拟字体文件
- .vpl TeX 虚拟属性列表
- .w Silvio Levi's CWEB
- .wav 波形声音文件
- .web Donald Knuth's WEB(唐纳得.可鲁梭的 WEB) ??
- .xbm X11 位图源文件
- .xml eXtended Markup Language file(扩展标记语言文件)
- .xsl XSL stylesheet
- .xpm X11 点图源文件
- .xs h2xs 生成的 Perl 的 xsub 文件
- .y \fB yacc\fR (1) 或 \fB bison\fR (1)(分析器生成器)文件
- .z \fB pack\fR (1) (或旧版 \fB gzip\fR (1)) 产生的压缩文件
- .zip \fB zip\fR (1) 档案文件
- .zoo \fB zoo\fR (1) 档案文件
- ~ Emacs 或 \fB patch\fR (1) 备份文件
- rc 开始 (`运行控制') 文件, 如. \fI .newsrc\fR
-.TE
+.nf
+ 后缀 文件类型
+ ,v RCS(Revision Control System(修改控制系统)) 文件
+ - 备份文件。
+ .C C++ 源代码文件。
+ .F 带 \fBcpp\fP(1) 的 Fortran 源代码或用 freeze 压缩的文件。
+ .S 汇编源代码。
+ .Y 用 yabba 压缩的文件。
+ .Z 用 \fB compress\fR (1) 压缩的文件。
+ .[0-9]+gf TeX 普通字体文件
+ .[0-9]+pk TeX 打包字体文件
+ .[1-9] 相关章节的手册页
+ .[1-9][a-z] 包含子章节的手册页
+ .a 静态对象代码库
+ .ad X 应用程序缺省资源文件。
+ .adb Ada 体源文件(校注:懂 Ada 的同志请指正)
+ .ads Ada 描述源文件
+ .afm PostScript 字体度量
+ .al Perl 自动加载文件
+ .am \fBautomake\fR (1) 输入文件
+ .arc \fBarc\fR (1) 档案文件
+ .arj \fBarj\fR (1) 档案文件
+ .asc PGP ASCII-保护数据
+ .asm (GNU) 汇编源代码
+ .au Audio 声音文件
+ .aux LaTeX 辅助文件
+ .avi (msvideo) 电影
+ .awk AWK 程序
+ .b LILO 启动加载器镜象
+ .bak 备份文件
+ .bash \fBbash\fR (1) 脚本
+ .bb gcc -ftest-coverage 生成的基础块列表数据
+ .bbg gcc -ftest-coverage 生成的基础块图形数据
+ .bbl BibTeX 输出文件
+ .bdf X 字体文件
+ .bib TeX 数目数据库,BibTeX 输入文件
+ .bm bitmap 源文件
+ .bmp bitmap 位图
+ .bz2 \fB bzip2\fR (1)的压缩文件
+ .c C 源代码
+ .cat 信息目录文件
+ .cc C++ 源代码
+ .cf 配置文件
+ .cfg 同上
+ .cgi 可以产生 web 页的脚本或程序
+ .class Java 已编译文件
+ .conf 配置文件
+ .config 同上
+ .cpp \fI(等价于 .cc) \fR
+ .csh \fBcsh\fR (1) 脚本
+ .cxx \fI(等价于 .cc) \fR
+ .dat 数据文件
+ .deb Debian 软件包
+ .def Modula-2 语言的定义模块的源代码
+ .def 其它定义文件
+ .desc 用 munpack 解压的邮件信息的初始化部分
+ .diff 文件不同之处 (diff(1) 的输出文件)
+ .dir dbm 数据库目录文件
+ .doc 文档文件
+ .dtx LaTeX 包的源文件
+ .dvi TeX's 设备无关的输出文件
+ .el Emacs-Lisp 源代码
+ .elc 编译后的 Emacs-Lisp 文件
+ .eps 压缩过的 PostScript
+ .f Fortran 源代码
+ .f77 Fortran 77 源代码
+ .f90 Fortran 90 源代码
+ .fas 预编译的 Common-Lisp
+ .fi Fortran 包含文件
+ .fig FIG 图象文件 (\fB xfig\fR (1)调用)
+ .fmt TeX 格式文件
+ .gif Compuserve Graphics Image File format(图象文件)
+ .gmo GNU 格式信息目录
+ .gsf Ghostscript 字体
+ .gz 用 \fB gzip\fR (1) 压缩的文件
+ .h C 或 C++ 头文件
+ .help 帮助文件 \fR
+ .hf 等价于 \fI .help\fR
+ .hlp 等价于 \fI .help\fR
+ .htm 穷人的(有些系统扩展名只能三个字符)\fI .html\fR
+ .html WWW 中使用的 HTML 文档
+ .hqx 7-位编码的 Macintosh 文件
+ .i 预处理过的 C 程序
+ .icon 位图源文件
+ .idx 超文本或数据库系统用的参考书目或数据索引
+ .image 位图源文件
+ .in 配置摸板,常用于 GNU Autoconf
+ .info Emacs info 浏览器文件
+ .info-[0-9]+ info 文件
+ .ins LaTeX 打包的用于 docstrip 的安装文件
+ .java Java 源代码
+ .jpeg Joint Photographic Experts Group format
+ .jpg 有些系统扩展名只能三个字符\fI .jpeg \fR
+ .kmap \fBlyx\fR (1) 键盘布局
+ .l 等价于 \fI .lex\fR 或 \fI .lisp\fR
+ .lex \fBlex\fR (1) 或 \fB flex\fR (1) 文件
+ .lha lharc 档案文件
+ .lib Common-Lisp 库文件
+ .lisp Lisp 源代码
+ .ln files for use with \fB lint\fR (1)
+ .log 日志文件, 多见于 TeX
+ .lsm Linux Software Map entry(软件列表?)
+ .lsp Common-Lisp 源代码
+ .lzh lharc 档案文件
+ .m4 \fBm4\fR (1) 源代码
+ .mac 宏命令文件
+ .man 手册页 (通常是源文件,有些是格式化过的)
+ .map map 文件
+ .me 使用 me 宏命令包的 Nroff 源文件
+ .mf Metafont (Tex 使用的字体) 资源
+ .mm \fBgroff\fR (1) 的 mm 格式的文件
+ .mo 信息目录二进制文件(校注:本地化文件)
+ .mod Modula-2 执行模块源代码
+ .mov (quicktime) 电影
+ .mp Metapost 资源
+ .mpe 电影
+ .o 对象文件
+ .old 旧的或备份文件
+ .orig \fBpatch\fR (1) 产生的备份或原始文件
+ .out 输出文件, 一般是可执行程序(a.out)
+ .p Pascal 源代码
+ .pag dbm 数据库数据文件
+ .patch \fBpatch\fR (1) 用的文件的差别文件
+ .pbm portable bitmap format(可移植位图格式)
+ .pcf X11 字体
+ .pdf AdobePortableDataFormat(用Acrobat/\fBacroread\fR或\fBxpdf\fR查看 )
+ .perl Perl 源代码
+ .pfa PostScript 字体定义文件, ASCII 格式
+ .pfb PostScript 字体定义文件, 二进制格式
+ .pgm portable greymap format(可移植灰度图格式)
+ .pgp PGP 二进制数据
+ .ph Perl 头文件
+ .pid 存储后台程序信息的文件(e.g. crond.pid)
+ .pl TeX 属性列表 或 Perl 库文件
+ .pm Perl 模块
+ .png Portable Network Graphics file(可移植网络图象文件)
+ .po 信息目录资源(校注:本地化资源文件)
+ .pod \fBperldoc\fR (1) 文件
+ .ppm portable pixmap format(可移植点图格式)
+ .pr bitmap source(位图资源)
+ .ps PostScript 文件
+ .py Python 源代码
+ .pyc python 编译后文件
+ .qt quicktime movie(电影)
+ .r RATFOR 资源 (已过时)
+ .rej \fBpatch\fR (1) 不能用的补丁
+ .rpm RedHat 软件包
+ .rtf Rich Text Format file(富文本文件)
+ .rules rules for something(规则文件)
+ .s assembler source(汇编源代码)
+ .sa a.out 共享库的存根库
+ .sc \fB sc\fR (1) 电子表格命令
+ .sgml SGML 源文件
+ .sh \fBsh\fR (1) 脚本
+ .shar \fBshar\fR (1) 产生的档案文件
+ .so 共享库或动态可载入对象
+ .sql SQL 资源
+ .sqml SQML 结构或查询程序
+ .sty LaTeX 类型文件
+ .sym Modula-2 已编译的定义模块
+ .tar \fBtar\fR (1) 产生的档案文件
+ .tar.Z \fBcompress\fR (1) 压缩的tar档案文件
+ .tar.bz2 \fBbzip2\fR (1) 压缩的tar档案文件
+ .tar.gz \fBgzip\fR (1) 压缩的tar档案文件
+ .taz \fBcompress\fR (1) 压缩的tar档案文件
+ .tex TeX 或 LaTeX 资源
+ .texi 等价于 \fI .texinfo\fR
+ .texinfo Texinfo 文档资源
+ .text 文本文件
+ .tfm TeX font metric file
+ .tgz \fBgzip\fR (1) 压缩的tar档案文件
+ .tif poor man's \fI .tiff(图象) \fR
+ .tiff Tagged Image File Format(图象)
+ .tk tcl/tk 脚本
+ .tmp 临时文件
+ .tmpl 临时文件
+ .txt 等价于 \fI .text\fR
+ .uu 等价于 \fI .uue\fR
+ .uue \fBuuencode\fR (1) 编码的二进制文件
+ .vf TeX 虚拟字体文件
+ .vpl TeX 虚拟属性列表
+ .w Silvio Levi's CWEB
+ .wav 波形声音文件
+ .web Donald Knuth's WEB(唐纳得.可鲁梭的 WEB) ??
+ .xbm X11 位图源文件
+ .xml eXtended Markup Language file(扩展标记语言文件)
+ .xsl XSL stylesheet
+ .xpm X11 点图源文件
+ .xs h2xs 生成的 Perl 的 xsub 文件
+ .y \fByacc\fR (1) 或 \fB bison\fR (1)(分析器生成器)文件
+ .z \fBpack\fR (1) (或旧版 \fB gzip\fR (1)) 产生的压缩文件
+ .zip \fBzip\fR (1) 档案文件
+ .zoo \fBzoo\fR (1) 档案文件
+ ~ Emacs 或 \fB patch\fR (1) 备份文件
+ rc 开始 (`运行控制') 文件, 如. \fI .newsrc\fR
+.fi
.SH "CONFORMS TO [遵循]"
一般 UNIX 约定
.SH BUGS
diff --git a/src/mann/memory.3tcl b/src/mann/memory.3tcl
index 08b0fb4..2df83b6 100644
--- a/src/mann/memory.3tcl
+++ b/src/mann/memory.3tcl
@@ -54,19 +54,18 @@ Tcl_InitMemory (interp)
.ft R
'
.SH ARGUMENTS
-.AS Tcl_Interp *fileName
-.AP uint size in
+Tcl_Interp *fileName
+uint size in
-.AP char *ptr in
-.AP Tcl_Interp *interp in
+char *ptr in
+Tcl_Interp *interp in
A pointer to the Tcl interpreter.
-.AP char *file in
+char *file in
The filename of the caller of Tcl_ValidateAllMemory.
-.AP int line in
+int line in
The line number of the caller of Tcl_ValidateAllMemory.
-.AP char *fileName in
+char *fileName in
File to display list of active memory.
-.BE
.SH "描述 DESCRIPTION"
.SS ckalloc
@@ -180,9 +179,6 @@ This allows you to detect the common sorts of one-off problems, where
not enough space was allocated to contain the data written, for example.
'
.SH THE MEMORY COMMAND
-'@help: debug/memory
-'@brief: display and debug memory problems
-'
.TP
.B memory \fIoptions\fR
.br
@@ -224,7 +220,6 @@ word \fIckalloc\fR is replaced by the word \fIckfree\fR.
.B memory \fBdisplay\fR \fIfile\fR
.br
向指定文件写当前所有分配的内存的一个列表。
-'@endhelp
'
.SH DEBUGGING DIFFICULT MEMORY CORRUPTION PROBLEMS
.PP
diff --git a/src/mann/safe.3tcl b/src/mann/safe.3tcl
index 09112a1..0e6491f 100644
--- a/src/mann/safe.3tcl
+++ b/src/mann/safe.3tcl
@@ -141,33 +141,32 @@ safe::interpConfigure $i0 \-delete {foo bar} \-statics 0 ;
\fIdirectory\fR
的记号。如果未找到这个路径则生成一个错误。使用的例子:
.RS
-.CS
$slave eval [list set tk_library [::safe::interpFindInAccessPath $name $tk_library]]
-.CE
.RE
.TP
\fB::safe::interpAddToAccessPath\fR \fIslave\fR \fIdirectory\fR
这个命令把 \fIdirectory\fR 添加到在主解释器中为安全解释器维护的虚拟路径中,并返回可在安全解释器中被用来获得到在这个目录中的文件的访问的记号。如果这个路径已经存在于虚拟路径中,则它只返回记号而不再次把这个路径添加到虚拟路径中。使用的例子:
.RS
-.CS
$slave eval [list set tk_library [::safe::interpAddToAccessPath $name $tk_library]]
-.CE
.RE
.TP
\fB::safe::setLogCmd\fR ?\fIcmd arg...\fR?
这个命令安装在一个脚本,在这个安全解释器的特定的生命周期事件发生的时候将被调用。在调用这个命令而不加参数时,它返回当前安装的脚本。在调用并加一个参数空串时,则删除当前安装的脚本并关闭日志记录。调用这个脚本时将加上一个补充参数,它描述所感兴趣的事件。主要的目的是帮助调试安全解释器。在安全解释器只能得到一个一般错误消息的时候你可以使用这个设施获得完整的错误消息。这防止安全解释器见到关于失败的消息和其他可能包含敏感信息如真实路径名的其他事件的消息。
.RS
使用的例子:
-.CS
+
::safe::setLogCmd puts stderr
-.CE
-下面是一个样本对话的输出,这里一个安全解释器尝试着 source 一个在它的虚拟访问路径中找不到的文件。注意这个安全解释器只接收到一个错误消息,说这个文件未找到:
-.CS
+
+下面是一个样本对话的输出,这里一个安全解释器尝试着 source 一个在它的虚拟
+访问路径中找不到的文件。注意这个安全解释器只接收到一个错误消息,说这个文
+件未找到:
+
+.nf
NOTICE for slave interp10 : Created
NOTICE for slave interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()
NOTICE for slave interp10 : auto_path in interp10 has been set to {$p(:0:)}
ERROR for slave interp10 : /foo/bar/init.tcl: no such file or directory
-.CE
+.fi
.RE
.SH "选项 OPTIONS"
diff --git a/src/mann/tclvars.3tcl b/src/mann/tclvars.3tcl
index 3dcbf3e..bb63d85 100644
--- a/src/mann/tclvars.3tcl
+++ b/src/mann/tclvars.3tcl
@@ -244,12 +244,8 @@ Database Class: \\fB\\$3\\fR
\\$1\l'|0\(ul'\\$2
..
.TH tclvars 3tcl 8.0 Tcl "Tcl Built-In Commands"
-.BS
-'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
tclvars \- Tcl 使用的变量
-.BE
-
.SH "描述 DESCRIPTION"
.PP
Tcl 库自动的建立和管理下列全局变量。除了下面专做说明的地方之外,对特定于应用的代码和用户,这些变量通常应当作为只读的来对待。
@@ -258,7 +254,10 @@ Tcl 库自动的建立和管理下列全局变量。除了下面专做说明的
Tcl 把这个变量维护为一个数组,它的元素是这个进程的环境变量。读取一个元素将返回相应的环境变量的值。设置这个数组的一个元素将修改相应的环境变量,如果它不存在则建立一个新的。删除 \fBenv\fR 的一个元素将删除相应的环境变量。对 \fBenv\fR 数组的变更将影响通过象 \fBexec \fR这样的命令传递给子进程的环境变量。如果删除了整个 \fBenv\fR 数组,则 Tcl 将停止监视 \fBenv\fR 访问并且将不更新环境变量。
.RS
.VS 8.0
-在 Windows 下,任何大小写形式的环境变量 PATH 和 COMSPEC 都被自动转换成大写的。例如,PATH 环境变量可以被操作系统导出为“path”、“Path”、“PaTh”、等,这导致其他简单 Tcl 代码必须支持许多特殊的写法。Tcl 继承的所有其他环境变量保持不变。
+在 Windows 下,任何大小写形式的环境变量 PATH 和 COMSPEC 都被自动转换成
+大写的。例如,PATH 环境变量可以被操作系统导出为\(lqpath\(rq、\(lqPath\(rq、\(lqPaTh\(rq、
+等,这导致其他简单 Tcl 代码必须支持许多特殊的写法。Tcl 继承的所有其他
+环境变量保持不变。
.VE
.RE
.RS
@@ -305,7 +304,11 @@ Tcl 把这个变量维护为一个数组,它的元素是这个进程的环
.PP
你还可以为 Macintosh 建立你自己的环境变量。叫做 \fBTcl Environment Variables\fR 的一个文件将被放置到 Mac 系统文件夹中的偏好文件夹中。这个文件中的每行的形式都是 \fIVAR_NAME=var_data\fR。
.PP
-最后的选择是把环境变量放置到这个应用的叫做 \fBTcl Environment Variables\fR 的一个‘STR#’资源文件中。这被认为是更象“Mac 式”而不是一个 Unix 式样的环境变量文件。‘STR#’资源中每个条目有与上述相同的格式。源代码文件 \fItclMacEnv.c\fR 包含 env 机制的实现。这个文件包含许多 #define,它们允许你定制 env 机制来适合你的应用的需要。
+最后的选择是把环境变量放置到这个应用的叫做 \fBTcl Environment
+Variables\fR 的一个`STR#'资源文件中。这被认为是更象\(lqMac 式\(rq而不是
+一个 Unix 式样的环境变量文件。`STR#'资源中每个条目有与上述相同的格式。源
+代码文件 \fItclMacEnv.c\fR 包含 env 机制的实现。这个文件包含许多 #define
+,它们允许你定制 env 机制来适合你的应用的需要。
.RE
.TP
\fBerrorCode\fR
@@ -316,19 +319,19 @@ Tcl 把这个变量维护为一个数组,它的元素是这个进程的环
在发生一个算术错误的时候使用这个格式(例如,在 \fBexpr\fR 命令中尝试除以零)。\fICode\fR 标识准确的错误而 \fImsg\fR 提供一个人可阅读的对错误的描述。\fICode\fR 将是下列之一:DIVZERO (尝试除以零)、DOMAIN (如果函数的一个参数在它的作用域之外,比如 acos(-3))、IOVERFLOW (整数溢出)、 OVERFLOW (浮点数溢出)、或 UNKNOWN (如果不能确定错误的原因)。
.TP
\fBCHILDKILLED\fI pid sigName msg\fR
-在子进程被一个信号所终止的时候使用这个格式。\fBerrorCode\fR 的第二个元素是这个进程的标识符(十进制数)。第三个元素标识导致进程终止的信号的符号名字;它将是在文件 signal.h 中包含的名字之一,比如 \fBSIGPIPE\fR。第四个元素是一个描述这个信号的人可阅读的短消息,比如对 \fBSIGPIPE\fR是“write on pipe with no readers”。
+在子进程被一个信号所终止的时候使用这个格式。\fBerrorCode\fR 的第二个元素是这个进程的标识符(十进制数)。第三个元素标识导致进程终止的信号的符号名字;它将是在文件 signal.h 中包含的名字之一,比如 \fBSIGPIPE\fR。第四个元素是一个描述这个信号的人可阅读的短消息,比如对 \fBSIGPIPE\fR是\(lqwrite on pipe with no readers\(rq。
.TP
\fBCHILDSTATUS\fI pid code\fR
在子进程以非零状态退出的时候使用这个格式。\fBerrorCode \fR的第二个元素是这个进程的标识符(十进制数),而第三个元素是这个进程返回的退出代码(也是十进制数)。
.TP
\fBCHILDSUSP\fI pid sigName msg\fR
-在子进程被一个信号所挂起的时候使用这个格式。\fBerrorCode\fR 的第二个元素是这个进程的标识符,是一个十进制数。第三个元素识导致进程挂起的信号的符号名字;它将是在文件signal.h 中包含的名字之一,比如 \fBSIGTTIN\fR。 第四个元素是一个描述这个信号的人可阅读的短消息,比如对 \fBSIGTTIN \fR是“background tty read”。
+在子进程被一个信号所挂起的时候使用这个格式。\fBerrorCode\fR 的第二个元素是这个进程的标识符,是一个十进制数。第三个元素识导致进程挂起的信号的符号名字;它将是在文件signal.h 中包含的名字之一,比如 \fBSIGTTIN\fR。 第四个元素是一个描述这个信号的人可阅读的短消息,比如对 \fBSIGTTIN \fR是\(lqbackground tty read\(rq。
.TP
\fBNONE\fR
对除了返回错误消息之外没有其他可获得的补充信息的错误使用这个格式。在这种情况下 \fBerrorCode\fR 将由只有一个单一元素的一个列表组成,这个元素的内容是 \fBNONE\fR。
.TP
\fBPOSIX \fIerrName msg\fR
-如果 \fBerrorCode\fR 的第一个元素是 \fBPOSIX\fR,则错误发生在一个 POSIX 内核调用期间。这个列表的第二个元素将包含发生的错误的符号名字,比如 \fBENOENT\fR;它将是在包含文件 errno.h 中定义的值之一。这个列表的第三个元素是对应于 \fIerrName\fR 的一个人可阅读的消息,比如对 \fBENOENT\fR 是“no such file or directory”。
+如果 \fBerrorCode\fR 的第一个元素是 \fBPOSIX\fR,则错误发生在一个 POSIX 内核调用期间。这个列表的第二个元素将包含发生的错误的符号名字,比如 \fBENOENT\fR;它将是在包含文件 errno.h 中定义的值之一。这个列表的第三个元素是对应于 \fIerrName\fR 的一个人可阅读的消息,比如对 \fBENOENT\fR 是\(lqno such file or directory\(rq。
.PP
要设置 \fBerrorCode\fR,应用应当使用库过程比如 \fBTcl_SetErrorCode\fR 和 \fBTcl_PosixError\fR,或者调用 \fBerror\fR 命令。如果使用了这些方法之一,则 Tcl 解释器将在下个错误之后重置这个变量为 \fBNONE\fR。
.RE
@@ -344,7 +347,16 @@ Tcl 把这个变量维护为一个数组,它的元素是这个进程的环
.VS 8.0 br
.TP
\fBtcl_pkgPath\fR
-这个变量持有一个目录的列表,它一般指示把包安装到哪里。在 Windows 上不使用它。它典型的包含一个或两个条目;如果它包含两个条目,第一个通常是依赖于平台的包的目录(例如,共享库的二进制文件)而第二个通常是平台无关的包的目录(例如,脚本文件)。典型的把包安装为在 \fB$tcl_pkgPath\fR 中的一个条目的一个子目录。在 \fB$tcl_pkgPath\fR 中的目录缺省的包含在 \fBauto_path\fR 变量中,所以 \fBpackage require\fR 命令期间自动的在它们和它们的直接子目录中查找包。注意: 不希望应用修改 \fBtcl_pkgPath\fR。在启动时它的值被添加到 \fBauto_path\fR;对 \fBtcl_pkgPath\fR 的变动不会反映到 \fBauto_path\fR 中。如果你想让 Tcl 来在额外的目录中查找包,你应该把这些目录的名字添加到 \fBauto_path\fR,而不是 \fBtcl_pkgPath\fR。
+这个变量持有一个目录的列表,它一般指示把包安装到哪里。在 Windows 上不使
+用它。它典型的包含一个或两个条目;如果它包含两个条目,第一个通常是依赖于
+平台的包的目录(例如,共享库的二进制文件)而第二个通常是平台无关的包的目录
+(例如,脚本文件)。典型的把包安装为在 \fB$tcl_pkgPath\fR 中的一个条目的
+一个子目录。在 \fB$tcl_pkgPath\fR 中的目录缺省的包含在 \fBauto_path\fR
+变量中,所以 \fBpackage require\fR 命令期间自动的在它们和它们的直接子目
+录中查找包。注意: 不希望应用修改 \fBtcl_pkgPath\fR。在启动时它的值被添加
+到 \fBauto_path\fR;对 \fBtcl_pkgPath\fR 的变动不会反映到
+\fBauto_path\fR 中。如果你想让 Tcl 来在额外的目录中查找包,你应该把这
+些目录的名字添加到 \fBauto_path\fR,而不是 \fBtcl_pkgPath\fR。
.VE
.TP
\fBtcl_platform\fR
@@ -381,7 +393,7 @@ Tcl 把这个变量维护为一个数组,它的元素是这个进程的环
.TP
\fBtcl_precision\fR
.VS
-这个变量在把浮点数转换成字符串时控制生成的数字的数目。它缺省的是 12。对于 IEEE 浮点数 17 位数字是“最佳的”,这样允许双精度值在二进制和字符串之间来回转换而不丢失信息。但是,使用 17 位数字将禁止任何舍入,这将生成更长,而更不直观的值。例如,\fBexpr 1.4\fR 在设置 \fBtcl_precision\fR 为 17 时返回 1.3999999999999999,而在设置 \fBtcl_precision\fR 为 12 时返回 1.4 。
+这个变量在把浮点数转换成字符串时控制生成的数字的数目。它缺省的是 12。对于 IEEE 浮点数 17 位数字是\(lq最佳的\(rq,这样允许双精度值在二进制和字符串之间来回转换而不丢失信息。但是,使用 17 位数字将禁止任何舍入,这将生成更长,而更不直观的值。例如,\fBexpr 1.4\fR 在设置 \fBtcl_precision\fR 为 17 时返回 1.3999999999999999,而在设置 \fBtcl_precision\fR 为 12 时返回 1.4 。
.RS
在一个进程中的所有解释器共享一个单一的 \fBtcl_precision\fR 值: 在一个解释器中改变它将同样影响所有其他解释器。但是,不允许安全解释器修改这个变量。
.RE
@@ -400,10 +412,17 @@ Tcl 把这个变量维护为一个数组,它的元素是这个进程的环
设置这个变量的值来控制在字节码执行期间显示多少跟踪信息。缺省的,tcl_traceExec 是零而不显示信息。设置 tcl_traceExec 为 1,在每次调用一个 Tcl 过程的时候在标准输出上生成一行跟踪。设置它为 2,在用命令的名字和它的参数调用任何Tcl 命令的时候,生成一行输出。设置它为 3,生成一个详细的跟踪,展示每个字节码指令的执行结果。注意在 tcl_traceExec 是 2 或 3 的时候,不展示象 set 和 incr 这样已经被整个替换为一个字节码指令序列的命令。在跟踪怀疑是 Tcl 编译器和解释器的问题时很有用。在把现存代码转换成 Tcl8.0 时也偶尔有用。
.TP
\fBtcl_wordchars\fR
-这个变量的值是一个正则表达式,设置它来控制认把什么字符认为是“字”字符。例如在 Tk 的文本框中用双击来选择一个字。它是平台相关的。在 Windows 上,它缺省为 \fB\S\fR,意思是除了 Unicode 空格字符之外的任何字符。其他平台上缺省为 \fB\w\fR,它是任何 Unicode 字字符(数字、字母、下划线)。
+这个变量的值是一个正则表达式,设置它来控制认把什么字符认为是\(lq字\(rq字
+符。例如在 Tk 的文本框中用双击来选择一个字。它是平台相关的。在 Windows
+上,它缺省为 \fB\\S\fR,意思是除了 Unicode 空格字符之外的任何字符。其他
+平台上缺省为 \fB\\w\fR,它是任何 Unicode 字字符(数字、字母、下划线)。
.TP
\fBtcl_nonwordchars\fR
-这个变量的值是一个正则表达式,设置它来控制认把什么字符认为是“非字”字符。例如在 Tk 的文本框中用双击来选择一个字。它是平台相关的。在 Windows 上,它缺省为 \fB\s\fR,意思是任何 Unicode 空格字符。其他平台上缺省为 \fB\W\fR,它是除了 Unicode 字字符(数字、字母、下划线)之外的任何字符。
+这个变量的值是一个正则表达式,设置它来控制认把什么字符认为是\(lq非字\(rq
+字符。例如在 Tk 的文本框中用双击来选择一个字。它是平台相关的。在
+Windows 上,它缺省为 \fB\\s\fR,意思是任何 Unicode 空格字符。其他平台上缺
+省为 \fB\\W\fR,它是除了 Unicode 字字符(数字、字母、下划线)之外的任何字符
+。
.TP
\fBtcl_version\fR
在建立解释器的时候,Tcl 初始化这个变量来持有这个版本的 Tcl 的版本号,形式是 \fIx.y\fR。对 \fIx\fR 的变更表示可能导致不兼容的较大的变化,对 \fIy\fR 的变更表示保持反向兼容的小增强和缺陷修理,\fBinfo tclversion\fR 命令返回这个变量的值。
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/chinese/manpages-zh.git
More information about the Chinese-commits
mailing list