Каково различие между одинарными и двойными кавычками в Perl?

Вот один из способов сделать это, для простоты предположим, что вы просто хотите распечатать объекты по порядку:

  # lets read all the data into a big 2d array
  buffer = []
  for row in readinput: 
        values = [row[0], row[1], row[2], row[3]]  
        buffer.append(values)       

  # what you have in your code
  for i in range(len(buffer)):
      for j in range(len(buffer[0])):
          print buffer[i][j]

  # this is called a transpose; we have buffer[i][j] to read row then column, 
  #    switch i and j around to do the opposite
  for i in range(len(buffer[0])):
      for j in range(len(buffer)):
          print buffer[j][i]

Так как вам нужен массив для передачи в writer.writerow, вы можете сделать это

  for i in range(len(buffer[0])):
      writer.writerow([buffer[j][i] for j in range(len(buffer))])
17
задан RobEarl 8 August 2013 в 21:27
поделиться

6 ответов

Двойные кавычки используют расширение переменных. Одиночные кавычки не могут

В строке с двойными кавычками вам нужно экранировать определенные символы, чтобы они не интерпретировались по-разному. В строке в одинарных кавычках вы этого не делаете (за исключением обратной косой черты, если это последний символ в строке)

my $var1 = 'Hello';

my $var2 = "$var1";
my $var3 = '$var1';

print $var2;
print "\n";
print $var3;
print "\n";

Будет выведено

Hello
$var1

Perl Monks имеет довольно хорошее объяснение этого здесь

36
ответ дан 30 November 2019 в 10:50
поделиться

'не разрешает переменные, а экранирование

"разрешает переменные и escape-символы.

Если вы хотите сохранить свой символ \ в строке в $ var2, используйте" \\ ("

4
ответ дан 30 November 2019 в 10:50
поделиться

Если вы собираетесь создавать строки регулярных выражений, вам действительно следует использовать qr // подобный кавычкам оператор :

my $matchStr = "(";
my $var1 = qr/\(/;
my $res1 = ($matchStr =~ m/$var1/);

Он создает скомпилированное регулярное выражение, которое намного быстрее чем просто использовать переменную, содержащую строку. Он также вернет строку, если не используется в контексте регулярного выражения, поэтому вы можете сказать такие вещи, как

print "$var1\n"; #prints (?-xism:\()
2
ответ дан 30 November 2019 в 10:50
поделиться

Двойные кавычки интерпретируют, а одинарные кавычки - нет

3
ответ дан 30 November 2019 в 10:50
поделиться

Perl принимает одинарные кавычки строки "как есть" и интерполируют строки в двойных кавычках. Интерполировать означает, что он заменяет переменные значениями переменных, а также понимает экранированные символы. Итак, ваш "\ (" интерпретируется как '(', а ваше регулярное выражение становится m / (/, вот почему Perl жалуется.

2
ответ дан 30 November 2019 в 10:50
поделиться

"" Поддерживает интерполяцию переменных и экранирование. поэтому внутри "\ (" \ экранирует (

Где as "'тоже не поддерживает. Итак, ' \ (' буквально \ (

]
1
ответ дан 30 November 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: