• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
            數據加載中……

            perl 特殊變量

            翻譯自:perldoc.perl.org

            == 常用變量 ==

            $ARG
            $_
            默認模式搜索變量
            下列函數使用它作為默認參數:
            abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob, hex, int, lc, lcfirst,
            length, log, lstat, mkdir, oct, ord, pos, print, quotemeta, readlink, readpipe, ref, require,
            reverse (in scalar context only), rmdir, sin, split (on its second argument), sqrt, stat,
            study, uc, ucfirst, unlink, unpack.
            用于文件測試 (-f, -d)
            用于模式匹配操作 m//, s/// 和 tr// (又名 y///)
            用于 foreach, grep, map
            用于 given 語句

            @ARG
            @_
            對于函數來說,@_ 包含了傳遞給該函數的參數。在函數中,@_ 是 push, pop, shift, unshift 的默認參數。

            $LIST_SEPARATOR
            $"
            當一個數組被引用在 "" 中或者 // 中。數組的值變為所有元素被 $" 連接起來的值。
            $" 默認值為空格。
            print "The array is: @array\n";
            print "The array is: " . join($", @array) . "\n";
            
            它們是相等的。
            @a = (1, 3, 4);
            print "@a\n";
            $" = ",";
            print "@a\n";
            print "1,3,4" =~ /@a/;
            
            輸出為
            1 3 4
            1,3,4
            1
            

            $PROCESS_ID
            $PID
            $$
            運行 perl 腳本的當前進程的 pid 值。等同于 getpid()。

            $REAL_GROUP_ID
            $GID
            $(
            該進程的 real gid 。由 getgid() 獲得。
            如果運行在一個支持用戶同時屬于多個組的操作系統上,$( 將返回由空格分隔的多個 gid。由 getgroups() 獲得。
            只能給 $( 賦予單個整數。

            $EFFECTIVE_GROUP_ID
            $EGID
            $)
            該進程的 effective gid。
            $< = $>;            # set real to effective uid
            ($<,$>) = ($>,$<);  # swap real and effective uids
            

            $PROGRAM_NAME
            $0
            當前程序的名字。

            $SUBSCRIPT_SEPARATOR
            $SUBSEP
            $;
            如果這樣訪問一個哈系表:
            $foo{$a,$b,$c}
            
            等同于:
            $foo{join($;, $a, $b, $c)}
            
            例子:
            %h = ('123', 'test');
            $; = '';
            print $h{1,2,3}; # 輸出 test
            

            %ENV
            存放環境變量哈希表。

            @F
            當指定了 -a 參數的時候,@F 中保存著每一行被分隔后的數組:
            perl -ane 'print pop(@F), "\n";'
            
            等同于
            while (<>) {
                @F = split(' ');
                print pop(@F), "\n";
            }
            

            $OSNAME
            $^O
            當前操作系統的名字。
            # perl -e "print $^O"
            # linux
            

            %SIG
            哈希 %SIG 中保存了信號的處理函數。例子如下:
            sub handler {   # 1st argument is signal name
                my($sig) = @_;
                print "Caught a SIG$sig--shutting down\n";
                close(LOG);
                exit(0);
                }
            $SIG{'INT'}  = \&handler;
            $SIG{'QUIT'} = \&handler;
            ...
            $SIG{'INT'}  = 'DEFAULT';   # restore default action
            $SIG{'QUIT'} = 'IGNORE';    # ignore SIGQUIT
            
            賦值為 'IGNORE' 則忽略該信號,除了 CHLD 信號。
            下面是指定處理函數的其他方式:
            $SIG{"PIPE"} = "Plumber";   # 指定為 main::Plumber (不推薦)
            $SIG{"PIPE"} = \&Plumber;   # 推薦的方式
            $SIG{"PIPE"} = *Plumber;    # 有點奇怪
            $SIG{"PIPE"} = Plumber();   # 錯誤的做法,Plumber() 會返回什么??
            
            部分內部的 hook 也可以通過設置 SIG 來指定。比如說:
            local $SIG{__WARN__} = sub { die $_[0] };
            eval $proggie;
            
            當一個 warning 被拋出的時候,$SIG{__WARN__} 所指向的函數將被調用。
            warning 消息的內容為函數的第一個參數。

            $BASETIME
            $^T
            程序開始運行的時間(時間戳)
            # perl -e "print $^T"
            1314234806
            

            $PERL_VERSION
            $^V
            perl 的版本號
            warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1
            

            == 和正則表達式相關的變量 ==

            $<digits> ($1, $2, ...)
            匹配中 () 匹配的部分。

            $&
            $MATCH
            前一次成功匹配的字符串。

            $`
            $PREMATCH
            位于前一次成功匹配字符串前面的字符串。

            $'
            $POSTMATCH
            位于前一次成功匹配字符串后面的字符串。

            local $_ = 'abcdefghi';
            /def/;
            print "$`:$&:$'\n";      # 輸出 abc:def:ghi
            

            $LAST_PAREN_MATCH
            $+
            前一次成功匹配中最后一個 () 中的內容。
            /Version: (.*)|Revision: (.*)/ && ($rev = $+);
            

            @LAST_MATCH_END
            @+
            前一次成功匹配中每個 () 匹配的偏移量。
            $+[0] 為整個匹配末尾的偏移量
            $+[1] 為 $1 末尾的偏移量
            $+[2] 為 $2 末尾的偏移量
            ...
            $#+ 為前一次成功匹配的 () 數量

            %LAST_PAREN_MATCH
            %+
            前一次成功匹配中命名匹配(即為 (?<name>...) 的形式)的哈系表。
            如:
            'foo' =~ /(?<foo>foo)/; # $+{foo} 和 $1 中都存放著 'foo'
            

            另外一個例子:
            $_ = "testing1234end";
            /^testing(.)(.)(..)end/;
            print "@+"; # 輸出 14 8 9 11
            /^(?<foo>[a-z]+)(?<num>\d+)/;
            print "$+{foo}"; # 輸出 testing
            print "$+{num}"; # 輸出 1234
            

            @LAST_MATCH_START
            @-
            和 @+ 類似:
            $-[0] 為整個匹配頭部的偏移量
            $-[1] 為 $1 頭部的偏移量
            $-[2] 為 $2 頭部的偏移量
            ...
            $` 等同于 substr($var, 0, $-[0])
            $& 等同于 substr($var, $-[0], $+[0] - $-[0])
            $' 等同于 substr($var, $+[0])
            $1 等同于 substr($var, $-[1], $+[1] - $-[1])
            $2 等同于 substr($var, $-[2], $+[2] - $-[2])
            $3 等同于 substr($var, $-[3], $+[3] - $-[3])

            %LAST_MATCH_START
            %-
            類似于 %+,通過 %- 可以訪問到上一次成功匹配中所有的命名匹配。
            每個命名匹配的名字都與一個數組相關聯。
            比如說:
            if ('1234' =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) {
                foreach my $bufname (sort keys %-) {
                    my $ary = $-{$bufname};
                    foreach my $idx (0..$#$ary) {
                        print "\$-{$bufname}[$idx] : ",
                              (defined($ary->[$idx]) ? "'$ary->[$idx]'" : "undef"),
                              "\n";
                    }
                }
            }
            
            會輸出:
            $-{A}[0] : '1'
            $-{A}[1] : '3'
            $-{B}[0] : '2'
            $-{B}[1] : '4'
            

            == 和文件句柄相關的變量 ==

            $ARGV
            <> 中正在被讀取的文件的名字
            例子:
            # cat c
            1
            2
            # cat d
            1
            2
            3
            4
            # cat a.pl 
            while (<>) {
                print "$ARGV\n";
            }
            # perl a.pl c d
            c
            c
            d
            d
            d
            d
            

            @ARGV
            命令行參數,$ARGV[0] 代表第一個參數(而不是程序的名字)。

            $OUTPUT_FIELD_SEPARATOR
            $OFS
            $,
            print 函數的輸出分隔符,默認值為 undef。
            例子:
            print "a", "c"; # 輸出 ac
            $, = "|";
            print "a", "c"; # 輸出 a|c
            

            $INPUT_LINE_NUMBER
            $NR
            $.
            上一次讀取文件的行號。
            $. 在文件句柄關閉的時候重置。
            由于 <> 操作符不會關閉文件,因此在連續從 ARGV 讀取文件的時候,$. 會不斷增加。
            例子:
            # cat a.pl
            while (<>) {
                print "$.\n";
            }
            # perl a.pl c d
            1
            2
            3
            4
            5
            6
            
            其中 c d 的長度分別為 2, 4 行。

            $INPUT_RECORD_SEPARATOR
            $RS
            $/
            類似于 awk 的 RS 變量。它決定了 perl 如何分割行。
            例子:
            # cat c
            1|2|3
            # cat a.pl 
            $/ = "|";
            while (<>) {
                print "line:$_\n";
            }
            # perl a.pl c
            line:1|
            line:2|
            line:3
            

            $OUTPUT_RECORD_SEPARATOR
            $ORS
            $\
            print 函數輸出的分隔符。默認值為 undef,如果定義了,則在 print 完所有參數后輸出 $\。
            例子:
            $\ = "|";
            print "a";
            print "b";
            # 將輸出 a|b|
            

            $OUTPUT_AUTOFLUSH
            $|
            如果設置為非0的值,將強制的 flush 當前 selected 的文件句柄。
            (類似于 setbuf(xx, NULL) ?)

            == 和錯誤信息有關的變量 ==

            $ERRNO
            $!
            等同于 libc 中的 errno??梢赞D換為 int 和 string 兩種形式:
            open '/a';
            print int($!) . ": $!\n"; # 輸出 2: 沒有那個文件或目錄
            

            $CHILD_ERROR
            $?
            類似于 shell 中的 $?。可以為下列操作的返回值:
            - 最后一次管道關閉
            - `` 或者 system() 語句
            - wait() 或者 waitpid()
            $? >> 8 為子進程的返回值

            $EVAL_ERROR
            $@
            上一次 eval() 操作的語法錯誤信息。
            例子:
            # cat a.pl
            eval "my a";
            print "$@";
            # perl a.pl
            No such class a at (eval 1) line 1, near "my a"
            syntax error at (eval 1) line 2, at EOF
            

            posted on 2011-08-24 23:45 糯米 閱讀(866) 評論(0)  編輯 收藏 引用 所屬分類: Perl

            国产精品久久久久影院色| 精品人妻伦一二三区久久| 亚洲人成精品久久久久| 久久精品无码专区免费青青 | 思思久久精品在热线热| 偷窥少妇久久久久久久久| 97久久精品午夜一区二区| 久久93精品国产91久久综合| 久久乐国产综合亚洲精品| MM131亚洲国产美女久久| 思思久久99热免费精品6| 久久99精品久久久久久hb无码| 精品国产乱码久久久久久浪潮| 久久久国产视频| 国产精品九九久久免费视频 | 伊人久久国产免费观看视频| 久久棈精品久久久久久噜噜| 久久精品国产精品亚洲人人| 久久久久亚洲精品无码蜜桃| 久久久久国产一级毛片高清板 | 久久精品99久久香蕉国产色戒| 久久久无码精品亚洲日韩软件| www性久久久com| 国产成人久久精品一区二区三区 | 99久久精品费精品国产一区二区| 久久综合色之久久综合| 久久国产精品-国产精品| 麻豆亚洲AV永久无码精品久久| 久久久精品久久久久影院| 久久er国产精品免费观看8| 久久国产精品99久久久久久老狼| 国内精品久久久久影院优| 亚洲精品无码久久久久去q | 久久AV高潮AV无码AV| 亚洲精品99久久久久中文字幕| 久久久WWW成人免费毛片| 国产免费久久久久久无码| 精品国产一区二区三区久久蜜臀 | 日本精品久久久久久久久免费| 99久久免费只有精品国产| 99久久www免费人成精品 |