Есть ли общий способ сделать сравнение как числового, так и строкового в Perl? - PullRequest
2 голосов
/ 13 июля 2011

Как все знают, в числовом сравнении используются разные операторы для работы со строками. Так есть ли в Perl общий способ сравнения числовых и строковых значений? Должен ли я всегда проверять значение числовое или строковое перед выполнением сравнения? Я новичок в Perl. Пожалуйста, помогите, если у вас есть идея. Спасибо.

Ответы [ 4 ]

1 голос
/ 13 июля 2011

Ну, обычно вы знаете, какие данные хранит конкретная переменная в определенный момент времени.Можете ли вы объяснить подробнее, в каком случае вы думаете о том, где бы вы не хотели?

Существуют модули, адаптированные к таким вещам, как сложные номера версий, которые могут иметь несколько строковых / числовых частей. Сортировать :: Естественно это один.

1 голос
/ 13 июля 2011

В дополнение к уже упомянутым способам, при использовании perl> 5.10.1, можно использовать smart match . В частности, посмотрите на строки 29 .. 32 в ссылочной таблице. Если один операнд выглядит как число, используется числовое сравнение, в противном случае возможен возврат к строке.

0 голосов
/ 13 июля 2011

Если сомневаетесь, используйте eq. Это работает и для чисел. Вам нужны только числовые операции, когда вы хотите что-то посчитать.

Perl преобразует числа в строки и наоборот, когда это необходимо, однако не все строки могут быть представлены числами, поэтому вы получите предупреждение и нулевое значение (пока мы на нем: всегда use strict; и use warnings;).

0 голосов
/ 13 июля 2011

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

Если вам действительно нужно проверить на строковое и числовое равенство, просто проверьте оба:

if ( ( $foo eq $bar ) && ( $foo == $bar ) )
...