📄 switch.3
字号:
.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05).\".\" 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. \*(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-.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\}.\".\" Escape single quotes in literal strings from groff's Unicode transform..ie \n(.g .ds Aq \(aq.el .ds Aq '.\".\" 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..ie \nF \{\. de IX. tm Index:\\$1\t\\n%\t"\\$2"... nr % 0. rr F.\}.el \{\. de IX...\}.\".\" 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 "Switch 3".TH Switch 3 "2007-12-18" "perl v5.10.0" "Perl Programmers Reference Guide".\" For nroff, turn off justification. Always turn off hyphenation; it makes.\" way too many mistakes in technical documents..if n .ad l.nh.SH "NAME"Switch \- A switch statement for Perl.SH "VERSION".IX Header "VERSION"This document describes version 2.11 of Switch,released Nov 22, 2006..SH "SYNOPSIS".IX Header "SYNOPSIS".Vb 1\& use Switch;\&\& switch ($val) {\& case 1 { print "number 1" }\& case "a" { print "string a" }\& case [1..10,42] { print "number in list" }\& case (@array) { print "number in list" }\& case /\ew+/ { print "pattern" }\& case qr/\ew+/ { print "pattern" }\& case (%hash) { print "entry in hash" }\& case (\e%hash) { print "entry in hash" }\& case (\e&sub) { print "arg to subroutine" }\& else { print "previous case not true" }\& }.Ve.SH "BACKGROUND".IX Header "BACKGROUND"[Skip ahead to \*(L"\s-1DESCRIPTION\s0\*(R" if you don't care about the whysand wherefores of this control structure].PPIn seeking to devise a \*(L"Swiss Army\*(R" case mechanism suitable for Perl,it is useful to generalize this notion of distributed conditionaltesting as far as possible. Specifically, the concept of \*(L"matching\*(R"between the switch value and the various case values need not berestricted to numeric (or string or referential) equality, as it is in other languages. Indeed, as Table 1 illustrates, Perloffers at least eighteen different ways in which two values couldgenerate a match..PP.Vb 1\& Table 1: Matching a switch value ($s) with a case value ($c)\&\& Switch Case Type of Match Implied Matching Code\& Value Value \& ====== ===== ===================== =============\&\& number same numeric or referential match if $s == $c;\& or ref equality\&\& object method result of method call match if $s\->$c();\& ref name match if defined $s\->$c();\& or ref\&\& other other string equality match if $s eq $c;\& non\-ref non\-ref\& scalar scalar\&\& string regexp pattern match match if $s =~ /$c/;\&\& array scalar array entry existence match if 0<=$c && $c<@$s;\& ref array entry definition match if defined $s\->[$c];\& array entry truth match if $s\->[$c];\&\& array array array intersection match if intersects(@$s, @$c);\& ref ref (apply this table to\& all pairs of elements\& $s\->[$i] and\& $c\->[$j])\&\& array regexp array grep match if grep /$c/, @$s;\& ref \&\& hash scalar hash entry existence match if exists $s\->{$c};\& ref hash entry definition match if defined $s\->{$c};\& hash entry truth match if $s\->{$c};\&\& hash regexp hash grep match if grep /$c/, keys %$s;\& ref \&\& sub scalar return value defn match if defined $s\->($c);\& ref return value truth match if $s\->($c);\&\& sub array return value defn match if defined $s\->(@$c);\& ref ref return value truth match if $s\->(@$c);.Ve.PPIn reality, Table 1 covers 31 alternatives, because only the equality andintersection tests are commutative; in all other cases, the roles ofthe \f(CW$s\fR and \f(CW$c\fR variables could be reversed to produce adifferent test. For example, instead of testing a single hash forthe existence of a series of keys (\f(CW\*(C`match if exists $s\->{$c}\*(C'\fR),one could test for the existence of a single key in a series of hashes(\f(CW\*(C`match if exists $c\->{$s}\*(C'\fR)..SH "DESCRIPTION".IX Header "DESCRIPTION"The Switch.pm module implements a generalized case mechanism that coversmost (but not all) of the numerous possible combinations of switch and casevalues described above..PPThe module augments the standard Perl syntax with two new controlstatements: \f(CW\*(C`switch\*(C'\fR and \f(CW\*(C`case\*(C'\fR. The \f(CW\*(C`switch\*(C'\fR statement takes asingle scalar argument of any type, specified in parentheses.\&\f(CW\*(C`switch\*(C'\fR stores this value as thecurrent switch value in a (localized) control variable.The value is followed by a block which may contain one or morePerl statements (including the \f(CW\*(C`case\*(C'\fR statement described below).The block is unconditionally executed once the switch value hasbeen cached..PPA \f(CW\*(C`case\*(C'\fR statement takes a single scalar argument (in mandatoryparentheses if it's a variable; otherwise the parens are optional) andselects the appropriate type of matching between that argument and thecurrent switch value. The type of matching used is determined by therespective types of the switch value and the \f(CW\*(C`case\*(C'\fR argument, asspecified in Table 1. If the match is successful, the mandatoryblock associated with the \f(CW\*(C`case\*(C'\fR statement is executed..PPIn most other respects, the \f(CW\*(C`case\*(C'\fR statement is semantically identicalto an \f(CW\*(C`if\*(C'\fR statement. For example, it can be followed by an \f(CW\*(C`else\*(C'\fRclause, and can be used as a postfix statement qualifier..PPHowever, when a \f(CW\*(C`case\*(C'\fR block has been executed control is automaticallytransferred to the statement after the immediately enclosing \f(CW\*(C`switch\*(C'\fRblock, rather than to the next statement within the block. In otherwords, the success of any \f(CW\*(C`case\*(C'\fR statement prevents other cases in thesame scope from executing. But see \*(L"Allowing fall-through\*(R" below.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -