Разница между "52" и 52? - PullRequest
       15

Разница между "52" и 52?

1 голос
/ 29 июня 2011

Парни Perl не так прост, я подумал, что это очень запутанная вещь. Я просто перешел к операторам и написал несколько кодов, но я не могу понять, как компилятор их обрабатывает.выход для вышеприведенного кода - 88, и куда делось добро?а теперь давайте посмотрим на другой.

$in ="42";

$out="good52"+32;

print $out ;

и для них результат равен 32. Вопрос в том, куда делась польза, которую мы только что сохранили в $ out, и значение 52 между "", почемуКомпилятор просто печатает значение как 32, но не этот оставшийся текст. И другой вопрос:

$in=52;

$in="52"; 

, оба выполняют ту же работу "52", не работая как текст.потому что, когда мы добавляем «52» +32, это дает 84. что происходит, и

$in = "hello";

$in = hello; 

оба выполняют одинаковую работу?или они отличаются, но если я печатаю, то выдает тот же результат. Это просто съедает мой мозг. Это так запутанно, потому что "52" или 52 и "привет" или привет делают ту же работу, почему они вводят "". Я простонужно объяснение, почему это происходит для вышеуказанных кодов.

Ответы [ 4 ]

6 голосов
/ 29 июня 2011

В Perl + - числовой оператор. Он пытается интерпретировать два своих операнда как числа. 51 - это число 51. "51" - это строка, содержащая две цифры, и оператор + пытается преобразовать строку в число, равное 51, и использует ее в вычислениях. "hello" - это строка, содержащая пять букв, и когда оператор + пытается интерпретировать это как число, оно равно 0 (нулю).

Ваш первый пример таков:

$out = "56"+32+"good";

, который оценивается так же, как:

$out = 56 + 32 + 0;

Ваш print затем преобразует это в строку на выходе и выдает 88.

В perl оператор + будет рассматривать свои аргументы как числа и пытаться преобразовать все, что не является числом, в число. Оператор . (точка) используется для объединения строк: он попытается преобразовать свои операнды в строки, если они еще не являются строками.

5 голосов
/ 29 июня 2011

Если поставить:

use strict;
use warnings;

В верхней части вашего скрипта вы получите такие предупреждения, как:

Argument "good" isn't numeric in addition (+) at ...
Argument "good52" isn't numeric in addition (+) at ...

Perl автоматически переназначает строковое значение на числовое, если это возможно. Таким образом, «42» + 10 фактически становится 52. Но он не может сделать это с правильным строковым значением, таким как «хорошо».

2 голосов
/ 29 июня 2011

В perl строка в числовом контексте (например, когда вы используете оператор +) преобразуется в число.

В perl вы можете объединить строку, используя . (точка)оператор, а не +.

Если вы используете +, Perl попытается интерпретировать все операнды как числа.Это хорошо работает для строк, которые являются представлениями чисел, в противном случае вы получаете 0. Это объясняет, что вы видите.

$in=52;

$in="52";

оба делаютта же работа "52" не работает как текст.потому что, когда мы добавляем «52» +32, это дает 84.

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

О вашем втором вопросе:

  1. $in = "hello" определяетстрока, как вы и ожидали;

  2. $in = hello; просто скопирует символ hello (как он определен) в вашу переменную.Это на самом деле не "строгий" Perl, и если вы установите use strict; в своем файле, Perl будет жаловаться на это.

1 голос
/ 29 июня 2011

Прежде всего, прочитайте this .

Ваша проблема в том, что + является математическим сложением, которое не работает со строками.Если вы используете это, Perl будет предполагать, что вы работаете с числами, и поэтому отбрасываете все, что не является.

Для объединения строк используйте .:

$str = "blah " . "blah " . "blah";

.Разница между "52" и 52 не существует.Поскольку ничто (команды, комментарии и т. Д.) В Perl не может начинаться с цифр, компилятору не нужны кавычки, чтобы знать, что делать.

...