Первый урок бесплатно :)
>while(true)В принципе нормально, но хватило бы 1 вместо true и нет явного условия выхода из цикла, прерывание программы по ctrl-c это дурной тон
>$file="c:/perl_prog/in" ;
Использование глобальной переменной. Многократное инициирование одним и тем же значением, должно быть вынесено за пределы цикла.
>open (ID,"$file")|| redo;
Вы проверяете на возможность открытия, а не на существование, правильно ли это зависит от ТЗ. Использование redo вместо next вызывает неправильное восприятие смысла проверки, что снижает читабельность
> while ($str=<ID>){
> $nomer=$str
> }
>print "Номер=",$nomer;
Опять глобальные переменные причем одна лишняя. Также не понятен смысл всей конструкции, неужели в ТЗ было сказано вывести последнюю строку файла? А что будет если файл окажется пустым вы подумали?
>redo;
Опять redo причем абсолютно лишнее, ведь после нее идет и так завершение итерации.
Итого только три строки из 11 не вызывают нареканий. Чуть не забыл, у вас плывет стиль оформления, что тоже не добавляет коду читабельности.
Неужели вам не стыдно такое показывать? Также добавлю что код написан без flock и скорее всего вы всегда пишете без него, как следствие ваши программы это мины замедленного действия. А вообще весь этот код пишется в одну строку и подобные по сложности однострочники могут писаться админами по несколько десятков за день, причем никто даже не подумает делится такой элементарщиной.
P.S. Все мы начинали с нуля, лет пятнадцать назад я тоже мог бы написать подобное. Не стыдно чего-то не уметь, но вот публично демонстрировать невежество, да еще и предлагать его как образец мягко говоря неумно. Чтобы вы подумали про человека, который первый раз в своей жизни забил гвоздь, причем коряво, и теперь спрашивает у окружающих не нужен ли кому-то его бесценный опыт?