Perl最強項的能力就在於字串的處理能力,不管是比對、擷取或是核心的regular expression(RE),透過這些處理能讓字串變成非常有用的資訊。
length 取得指定字串長度
標準語法:
length EXPR
my $str = “hello”;
print length($str); # 長度5
控制字元也是有佔長度的
my $str = “hello\n”;
print length($str); # 長度6
index 取得子字串在主字串第一次出現的位置(找不到傳回-1)
標準語法:
index STR,SUBSTR,POSITION
index STR,SUBSTR
my $mains = “hello world”;
my $subs = “world”;
print index($mains, $subs); # 印出6
需注意的一點 index 永遠只傳回第一次找到的子字串位置
my $mains = “well, well, well”;
my $subs = “well”;
print index($mains, $subs); # 印出0
那要如何找出第二個 well 位置,這時就要利用POSITION 來處理,預設值為0
my $mains = “well, well, well”;
my $subs = “well”;
my $first = index($main, $subs);
print index($mains, $subs, $first+1); # 找到第二個
那要如何找到最後一個子字串出現的位置,用迴圈一直找下去,….
Perl 提供了另一個 rindex function
rindex 取得子字串從主字串最後面往回找的第一個位置
標準語法:
rindex STR,SUBSTR,POSITION
rindex STR,SUBSTR
my $mains = “well, well, well”;
my $subs = “well”;
print rindex($mains, $subs); # 印出12
substr 取出字串中的某字串
標準語法:
substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET
my $str = “Misunderstood”;
print substr($str, 3); # 印出 understood
沒傳入長度參數,perl會自動取出到字串最後。
my $s = "The black cat climbed the green tree";
my $color = substr $s, 4, 5; # black
my $middle = substr $s, 4, -11; # black cat climbed the
my $end = substr $s, 14; # climbed the green tree
my $tail = substr $s, -4; # tree
my $z = substr $s, -4, 2; # tr
由標準語法可以看出,substr也可以用在字串取代上,以下各種方法雖然不一樣,但目的是相同的。
my $str = "Love is only rule";
substr($str, 0, 4, "True"); # True is only rule
substr($str, 0, 4) = "Good"; # Good is only rule
$str =~ s/Good/Love/; # Love is only rule
uc 轉換成大寫
標準語法:
uc EXPR
my $str = “good”;
print uc $str; # GOOD
ucfirst 首字母轉成大寫
lc 轉換成小寫
標準語法:
lc EXPR
my $str = “GOOD”;
print lc $str; # good
lcfirst 首字母轉換成小寫
sprintf 格式化字串輸出
標準語法:
sprintf FORMAT,LIST
# Format number with up to 8 leading zeroes
$result = sprintf("%08d", $number);
各式各樣的表示:
%% 百分比符號
%c 字元
%s 字串
%d 包含正負號的十進位整數
%u 不包含正負號的十進位整數
%o 不包含正負號的八進位整數
%x 不包含正負號的十六進位整數
%e 以科學符號表示的浮點數
%f 固定長度的十進位浮點數
%g 用 %e 或 %f 表示的浮點數
%X 以大寫表示的%x
%E 像%e一樣,但以大寫顯示"E"符號
%G 像%g一樣,但以大寫顯示"E"符號
%b binary
%B 像%b一樣,但以大寫顯示"B"符號(在5.8.0版試不出來)
%p a pointer (outputs the Perl value's address in hexadecimal)
%n special: *stores* the number of characters output so far into the next variable in the parameter list
%i 同%d
%D 同%ld
%U 同%lu
%O 同%lo
%F 同%f
format parameter index 這是perl 提供一個很不一樣的功能,讓你能直接明確指出要輸出的順序,例如2$
printf '%2$d %1$d', 12, 34; # 印出 "34 12"
printf '%3$d %d %1$d %d', 1, 2, 3; # 印出 "3 1 1 2"
printf '%2$d %d %d', 1, 2, 3; # 印出來的是 “2 1 2”
需注意的地方,當你指明順序後,下一個輸出為你指定的位置後下一個未使用的值。
flag
space prefix non-negative number with a space
+ prefix non-negative number with a plus sign
- left-justify within the field
0 use zeros, not spaces, to right-justify
# ensure the leading "0" for any octal,
prefix non-zero hexadecimal with "0x" or "0X",
prefix non-zero binary with "0b" or "0B"
printf '<% d>', 12; # prints "< 12>"
printf '<%+d>', 12; # prints "<+12>"
printf '<%6s>', 12; # prints "< 12>"
printf '<%-6s>', 12; # prints "<12 >"
printf '<%06s>', 12; # prints "<000012>"
printf '<%#o>', 12; # prints "<014>"
printf '<%#x>', 12; # prints "<0xc>"
printf '<%#X>', 12; # prints "<0XC>"
printf '<%#b>', 12; # prints "<0b1100>"
flag +和space同時出現時
printf '<%+ d>', 12; # prints "<+12>"
printf '<% +d>', 12; # prints "<+12>"
實際上的輸出顯示並不是和perldoc上說的一樣,實際結果如下:
< 12>
<+12>
#. Padding zero
printf '<%#.10d>', 12; # 印出 "<0000000012>"
chomp 移除字串尾端的換行字元
標準語法:
chomp VARIABLE
chomp(LIST)
$a = <STDIN>; # 從鍵盤(即標準輸入裝置,STDIN)取得一列文字輸入 chomp($a); # 刪除此輸入字串尾端的換行符號
chop 移除字串的最後一個字元和回傳此字元
標準語法:
chop VARIABLE
chop(LIST)
$str = “0123456789”;
print chop($str); # return 9
print $str; # return 012345678
reverse 字串反轉
標準語法:
reverse LIST
$str = “0123456789”;
print reverse($str); # return 9876543210
閱讀全文...