2015-03-11 3 views
-2

Есть ли в любом случае, чтобы perl выполнял файл с числами и распечатывал только числа, которые не имеют десятичной точки в них?Perl - печатать номера без десятичной точки

Так позволяет сказать, что у меня есть 60, 78,9, 109 и я хочу, чтобы напечатать 60, 109.

Возможно ли это в Perl?

ответ

4

3.0 и 3 - это то же число, поэтому вы можете проверить только десятичную точку, если у вас есть строковые представления чисел. Если это то, что у вас есть, вы можете использовать следующее:

print "$_\n" for grep { !/\./ } @numbers; 
    -or- 
print "$_\n" for grep { /^[0-9]+\z/ } @numbers; 

Если, с другой стороны, вы хотите, чтобы отфильтровать числа с дробным компонентом (три, но три и одну десятой не должны), то вы можете проверить, изменит ли номер int номер (поскольку он удаляет дробный компонент).

print "$_\n" for grep { $_ == int($_) } @numbers; 
+0

ok Я просто не знаю, о чем вы говорите, и ничего не знаете о функции «grep». Как узнать, находятся ли мои номера в строках или дробных компонентах? Я просто использую их в текстовом файле –

+0

Они будут текстовыми в файле, поэтому у вас есть возможность использовать либо в зависимости от того, что вы хотите сделать, так и для '3.0'. Если вы не хотите использовать 'grep', вы можете использовать другой тип цикла. Соответствующая часть - '$ _! ~ /\./' и '$ _ == int ($ _)'. – ikegami

+0

'grep {m/^ \ d + $ /} @ numbers' кажется более простым и правильным. Например, что, если числа содержали '' abc''. (для первого случая, ваш второй пример замечательный) –

0
perl -ne 'print unless /\./;' < file 

это самый простой способ сделать то, что вы описали с Perl, что я могу думать.

+0

что такое perl -ne? –

+2

'perl' - интерпретатор Perl. '-n' выполняет скрипт для строки достижений файлов, предоставленных в качестве аргументов (или STDIN, если аргументы не указаны). '-e' позволяет предоставить сценарий для выполнения в качестве параметра, а не для хранения его в файле. [PerlRun] (http://perldoc.perl.org/perlrun.html). – ikegami