2008-11-10 2217 views
47

在Python,如果我這樣做:如何在Perl中重複N次字符串?

print "4" * 4 

我得到

> "4444" 

在Perl中,我得到

> 16 

有一個簡單的方法來做到前者Perl的?

+0

這也是可能的字符串變量(和字符串表達式),參見[我的回答(http://stackoverflow.com/a/30100928/2932052)。 – Wolf 2015-05-07 12:20:34

回答

86
$ perl -e 'print "4"x4; print "\n"' 
4444 

x操作符記錄在perldoc perlop中。這裏的二進制表示運算符取兩個參數,不是由比特組成,順便說一下。

二進制 「X」 是重複操作。在標量上下文,或者如果 左操作數未括在括號中,它返回一個由左操作數的 串重複的由右 操作數中指定的次數。在列表上下文中,如果左操作數包含在圓括號 中,或者是由「qw/STRING/」組成的列表,則重複該列表。如果右邊的 操作數爲零或負數,則返回空字符串或空列表,具體取決於上下文。

 print ’-’ x 80;    # print row of dashes 

     print "\t" x ($tab/8), ’ ’ x ($tab%8);  # tab over 

     @ones = (1) x 80;   # a list of 80 1’s 
     @ones = (5) x @ones;  # set all elements to 5 

的perl -e是指通過命令行執行Perl代碼:

 
$ perl --help 
Usage: perl [switches] [--] [programfile] [arguments] 
    
    -e program  one line of program (several -e's allowed, omit programfile) 
+0

完美,謝謝:) – izb 2008-11-10 10:04:36

+1

只是一句話 - 它可能不是很清楚所有的Perl用戶(尤其是新的)-e選項做什麼,所以這將是更好地提供直接的代碼示例(保羅的迴應一樣)。 – 2008-11-10 10:13:46

+0

`perl -Esay + 4x4`在這裏,'-E'使'使用5.010'(特別是 - '說'功能)。 `說「$ var」`與'print'$ var \ n「`相同。在標量上下文中,'x'操作符總是返回一個字符串,所以不需要在這裏使用引號。 – jfs 2008-11-10 12:53:01

16

這是在Perl

print "4" x 4; 
39

在Perl很相似,要使用「x」操作符。

"4" x 4 

("4") x 4 

前者之間的差別產生重複的字符串:

"4444" 

後者重複列表:

("4", "4", "4", "4") 
8

FWIW,它也是Perl中的print 4 x 4

一般來說,在Perl中,運營商是單態,即。對於字符串語義,數字語義,按位語義等,有不同的操作符集合,操作數的類型在很大程度上並不重要。當你將一個數字運算符應用於一個字符串時,該字符串首先被轉換爲一個數字,然後你得到你要求的操作(例如乘法),並且當你將一個字符串運算符應用於一個數字時,它會變成一個字符串,而你獲得您要求的操作(例如重複)。 Perl首先關注操作符,而操作數的類型則僅次於操作符 - 如果實際上它確實向他們付出任何代價。

這是Python和大多數其他語言,你使用一組運營商的對立面,和類型的操作數的確定語義你實際上會得到 - 即。運算符是多態的。

1

所有的答案,給了這麼遠,錯過一提的是運營商x不僅在字符串文字,但也對字符串變量或建立字符串表達式的工作:

$msg = "hello "; 
print $msg x 2; 
print ($msg x 2) x 2; 
1

如果要打印10個字符「A」 S,你也可以做到這一點

perl -e 'print "A" x 10'; echo 

例與輸出

[email protected]:~$ perl -e 'print "A" x 10'; echo 
AAAAAAAAAA 
[email protected]:~$