我想報告一個字符在字串中出現的次數。感謝有沒有更好的方法來計算字串中字符的出現次數?,下面的第一部分作業得很優雅。
#!/usr/bin/env perl
use strict; use warnings;
my $string='dog
#
####
pig horse';
# https://stackoverflow.com/questions/34437248/is-there-a-better-way-to-count-occurrence-of-char-in-a-string
print join('','# occurs ',my$dummy=()=$string=~/[#]/g,' times in',"\n",$string,"\n",);
# the following yields no count at all:
print join('','# occurs ',()=$string=~/[#]/g,' times in',"\n",$string,"\n",);
有沒有辦法消除看似無緣無故的$dummy變數宣告?我想直接使用該整數,join
而無需先宣告一個變數來獲取該值。
uj5u.com熱心網友回復:
那把戲
$dummy = () = $string =~ /[#]/g
有效,因為整個賦值運算式
() = EXPR
本身在標量背景關系中,被分配給一個標量 ( $dummy),因此它回傳回傳的可能串列的長度EXPR(它在串列背景關系中)。
所以將標量背景關系強加于它
say join('', '# occurs ', scalar( () = $string =~ /#/g ),' times');
為了便于閱讀,我縮短了字串,并使用say了print ... "\n". ?
有關更多資訊及其背景關系以及其中的鏈接,請參閱此頁面() = EXPR。
不確定這是否真的更漂亮,但它可以滿足要求。
但是如果你真的總是只想要一個字符的數量,tr那么它會更好
print join('', '# occurs ', $string =~ tr/#//,' times in',"\n",$string,"\n",);
?如果真的只是列印,那么就沒有必要形成一個字串,join ''因為print它接受一個串列并有效地連接元素,中間沒有任何東西,所以連接它們
say '# occurs ', scalar( () = $string =~ /#/g ), " times in\n", $string;
或者,對于單個字符
say '# occurs ', $string =~ tr/#//, ' times in', "\n", $string;
(但我認為列印只是這個問題的一個例子,你真的需要一個字串......)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362801.html
上一篇:如何用函式做字串替換字符?
