доброго всем.. чего-нибудь
начал тут изучать перловку после изучения шелла.. пытаюсь найти аналохи давно привычных операций, типа wc -l, sed 2000!d filename и т.д., и чё-то гуголь не помогает совсем
какие-то там сложные всё решения
например, предлагается для подсчёта строк в файле использовать:open(FILENAME,"filename");
while(<>)
{
}
print $."\n";тобишь он должен пробежать по всему файлу и выдать номер последней строки.. Ы
но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74 страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле строк и сколько в каждой считываемой строке символов (кстати, аналог wc -m это length $curline) и т.д., поэтому вот ищу какой-то способ по ресурсонезависемей, чем считывания построчно всего файла.. а особенно, если он в цикле....конкретно, хотелось бы, для начала, научиться воспроизводить:
wc -l, wc -w (последнее, видимо, читается через split(), а потом можно посчитать кол-во элементов в массиве видимо.. проще никак?)
sed -n 900p (или sed 900!d), т.е. распечатка конкретной строки из файла
пробовал:
open (FILENAME,"namefile");
foreach (<FILENAME>)
{
print $_ if $.==12;
}
но, во1, оно, опять же, считывает построчно весь файл, что не совсем эффективно, а, во2, не работает..вот.. может кто подскажет, а то книжку пока прочту..
>но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74
>страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле
>строк и сколько в каждой считываемой строке символов (кстати, аналог wcкак по вашему перл должен узнать, сколько строк в файле, пока не прочинает его целиком и не сосчитает, сколько символов перевода строки в нем?
>
>>но вообще есть мысль (подтверждённая книжкой с верблюдом, которую я аж 74
>>страницы уже прочёл), что перл авто_в_курсе сколько в каждом считываемом файле
>>строк и сколько в каждой считываемой строке символов (кстати, аналог wc
>
>как по вашему перл должен узнать, сколько строк в файле, пока не
>прочинает его целиком и не сосчитает, сколько символов перевода строки в
>нем?перескочить к последней строке например?
или может подобная инфа содержится в заголовке файла..
а wc что считает все строки?
хотя перл быстрее раза в 3-4 отрабатывает такой подсчёт, чем wc..
но вообще я надеялся, что там функция есть, типа length(), для строк
>перескочить к последней строке например?И что мы узнаем, кроме того, что эта строка первая с конца? А нам-то нужно с начала.
>или может подобная инфа содержится в заголовке файла..
Не содержится.
>а wc что считает все строки?
Конечно считает, для этого программа и предназначена.
Пёрл творит чудеса только в переносном смысле :-) а так работает, как и любая другая программа. Попробуйте представить себе алгоритм решения этой задачи (если не лень, то с блок-схемами, стрелочками и квадратиками), тут же куча вопросов отпадёт сама собой.
>[оверквотинг удален]
>Не содержится.
>
>>а wc что считает все строки?
>
>Конечно считает, для этого программа и предназначена.
>
>Пёрл творит чудеса только в переносном смысле :-) а так работает, как
>и любая другая программа. Попробуйте представить себе алгоритм решения этой задачи
>(если не лень, то с блок-схемами, стрелочками и квадратиками), тут же
>куча вопросов отпадёт сама собой.понятно
ну я надеюсь, он хотя бы в памяти то хранит весь прогон по файлу, чтобы, в случае, если он в цикле, не грузить проц по-новой..ну а чего ж не работает этот код:
open (FILENAME,"namefile");
foreach (<FILENAME>)
{
print $_ if $.==12;
}вроде всё логично..
и самая что ни на есть замена sed должна быть
>ну а чего ж не работает этот код:Всё просто:
>open (FILENAME,"namefile");
Открыли файл, ничего не прочитали пока.
>foreach (<FILENAME>)
Подставили файл туда, где ожидается список. Соответственно из файла (неявно!) делается список, т. е. файл читается, разбивается на строки, из которых и составляется список.
>{
>print $_ if $.==12;Ага! Файл-то уже прочитан весь! Тогда $. сразу же содержит число строк в этом файле.
>}
Ох уж эти неявные преобразования в Пёрле! Они делают программы лёгкими для написания, но трудными для понимания и ловли глюков ;-)
а в чем смысл всего этого маразма?
>а в чем смысл всего этого маразма?ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...
>>а в чем смысл всего этого маразма?
>
>ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...не считаю сильно похвальным познавать мир через ж... ))
любая книжка по перл-програмингу наставила бы на путь истинный
>>>а в чем смысл всего этого маразма?
>>
>>ХЗ. Думаю, человек познаёт мир :-) Похвально, что же...
>
>не считаю сильно похвальным познавать мир через ж... ))
>любая книжка по перл-програмингу наставила бы на путь истинныйИстину глаголишь :-) Но не могу я так сразу посылать на букву G. Впрочем, теперь уже пора.
>[оверквотинг удален]
>>{
>>print $_ if $.==12;
>
>Ага! Файл-то уже прочитан весь! Тогда $. сразу же содержит число строк
>в этом файле.
>
>>}
>
>Ох уж эти неявные преобразования в Пёрле! Они делают программы лёгкими для
>написания, но трудными для понимания и ловли глюков ;-)непонятно, почему он уже весь прочитан, когда должен отработать блок {} для каждой строки..
вообще оно работает, если вместо foreach использовать while
очевидно я плохо понял значение foreach...P.S. кстати, аналог wc -w:
open(FILENAME,"namefile");
@words=split(/ /, $_);
$wordsnumber=scalar @words;
>непонятно, почему он уже весь прочитан, когда должен отработать блок {} для
>каждой строки..Ещё раз внимательно перечитайте про неявное преобразование файла в список и поймёте, что не "для каждой строки", а для "для каждого элемента списка". А дальше попробуйте понять разницу между ними.
>начал тут изучать перловку
>типа wc -l, sed 2000!d filename и т.д., и чё-тоgoogle.ru + perl oneliners "wc -l"
и т.п.
ок
начитался книжку. напрограммировал уже на тысячу строк
очень парит одна непонятная вещь
глюки со знаками меньше/больше либо равно
<= =>
а также их эквивалентами: le ge
просто необъяснимые глюки какие-то..
примеры слишком увесистые, но вкраце: если пишешь: $ll < 3000 (где $ll = length $line), то всё ок
а если написать $ll <= 3000 или $ll le 3000, то идут глюки и неправильности в вычислении
контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
так работает, а вот так глючит: if((1100 < $ll) & ($ll le 2100)){ ... }
почему так?
>начитался книжку. напрограммировал уже на тысячу строк
>очень парит одна непонятная вещь
>глюки со знаками меньше/больше либо равно
><= =>
>а также их эквивалентами: le ge
>просто необъяснимые глюки какие-то..
>примеры слишком увесистые, но вкраце: если пишешь: $ll < 3000 (где $ll
>= length $line), то всё ок
>а если написать $ll <= 3000 или $ll le 3000, то идут
>глюки и неправильности в вычисленииНачитайтесь заодно perldoc perlop:
Relational OperatorsBinary "<" returns true if the left argument is numerically less than the right argument.
Binary ">" returns true if the left argument is numerically greater than the right argument.
Binary "<=" returns true if the left argument is numerically less than or equal to the right argument.
Binary ">=" returns true if the left argument is numerically greater than or equal to the right argument.
Binary "lt" returns true if the left argument is stringwise less than the right argument.
Binary "gt" returns true if the left argument is stringwise greater than the right argument.
Binary "le" returns true if the left argument is stringwise less than or equal to the right argument.
Binary "ge" returns true if the left argument is stringwise greater than or equal to the right argument.
Надеюсь, разницу между "numerically" и "stringwise" объяснять не надо?
>[оверквотинг удален]
>Binary "lt" returns true if the left argument is stringwise less than
>the right argument.
>Binary "gt" returns true if the left argument is stringwise greater than
>the right argument.
>Binary "le" returns true if the left argument is stringwise less than
>or equal to the right argument.
>Binary "ge" returns true if the left argument is stringwise greater than
>or equal to the right argument.
>
хмм.. в книжке про это всего пол-страницы. и не сказано даже, что есть строковая величина.. длина её? ширина? :D если длина, то эквивалент length ?
тобишь '1000 <= length$line' всё-равно что '$line ge 1000' так чтоли?
или надо $line ge $line2
я ещё и => писал, вместо >=
На пальцах
$ perl -E '$a=2;$b=10;say 1 if $a < $b; say 2 if $a lt $b;'
1
Как число 2 меньше 10, а как строка больше ибо строки сравниваются посимвольно и символ 2 идет позже символа 1.
Проблемы с < и <= мне непонятны, покажите пример. Надеюсь о том, что нельзя применять равенство к вещественным(не целым) числам, вам в школе рассказали.
>На пальцах
>$ perl -E '$a=2;$b=10;say 1 if $a < $b; say 2 if
>$a lt $b;'
>1
>Как число 2 меньше 10, а как строка больше ибо строки сравниваются
>посимвольно и символ 2 идет позже символа 1.
>Проблемы с < и <= мне непонятны, покажите пример.пример вот:
если пишешь: $ll < 3000 (где $ll = length $line), то всё ок
а если написать $ll <= 3000 или $ll le 3000, то идут глюки и неправильности в вычислении
контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
так работает, а вот так глючит: if((1100 < $ll) & ($ll le 2100)){ ... }>Надеюсь о том, что нельзя применять равенство к вещественным(не целым) числам, вам в >школе рассказали.
шутите? у меня школа была давным-давно, а чтобы такое помнить, надо регулярно математить чего-нибудь. я даже не помню, что такое "вещественное число".. пришлось в википедии смотреть
---
Веще́ственные, или действи́тельные[1] числа — математические объекты, введённые для представления и сравнения значений физических величин.Физи́ческая величина́ — это количественная характеристика объекта или явления в физике, либо результат измерения.
---и количественная характеристика и результат измерения, по сути, числа..........
короче, я запутался, почему к числам нельзя применять равенства
на пальцах как-то понятней было :D
>если пишешь: $ll < 3000 (где $ll = length $line), то всё
>ок
>а если написать $ll <= 3000 или $ll le 3000, то идут
>глюки и неправильности в вычисленииПриведите пример где замена $ll < 3000 на $ll <= 3000 вызовет проблему. Главное не меняйте при этом больше ничего, а то сдается вы одновременно меняете еще и числовое сравнение на строковое.
>контекст такой: if((1100 < $ll) & ($ll < 2100)){ ... }
>так работает, а вот так глючит: if((1100 < $ll) & ($ll le
>2100)){ ... }Perl в отличии от многих языков не делает разницы между числовыми и строковыми данными в скалярах. То есть $a=1 и $a="1" это одно и то же значение. Различия возникают в момент использования. Программист должен указать как он хочет интерпретировать значения в конкретном случае. Так как длина строки есть _по смыслу_ число, то применять надо операторы для сравнения чисел. Что совершенно не помешает в другом месте применить к той же переменной строковые сравнения, если в этом месте она нам нужна как строка.
>и количественная характеристика и результат измерения, по сути, числа..........
>короче, я запутался, почему к числам нельзя применять равенства
>на пальцах как-то понятней было :DТут не столько математическая, сколько чисто компьютерная проблема. Вещественные числа в процессоре имеют ограниченное количество цифр, как следствие возникают погрешности округления. Поэтому например $a=2/5*5 может оказаться не ровно 2, а 2.000000000001 или 1.99999999999. Как следствие нельзя делать прямое сравнение if $a == 2, а нужно сравнение на минимальную разницу вроде такого: if abs($a-2)<0.00001
>Приведите пример где замена $ll < 3000 на $ll <= 3000 вызовет
>проблему. Главное не меняйте при этом больше ничего, а то сдается
>вы одновременно меняете еще и числовое сравнение на строковое.я там уже скрипт перекоцал, но щас подстановка <= вместо < работает без сбоев. вполне допускаю, что меня проглючило и я какие-то другие ошибки приписал к <=
le всё также не работает, поскольку я пытаюсь не по длине строки мерять, а посимвольно. это мне и нужно было знать. спасибо, что всё так подробно разжевалиещё бы понять, а где может понадобиться посимвольное сравнение.. вот в шелле я юзал le lt gt ge вместо знаков, потому что знаки там иногда делали другую операцию.. например, > пытался записать в файл.. а тут какие-то посимвольные сравнения...
>ещё бы понять, а где может понадобиться посимвольное сравнение..На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.
>вот в шелле я юзал le lt gt ge вместо знаков
В шелле(по крайней мере в bash) как раз le lt gt ge означают численное сравнение, а <, >, <=, >= итд строковое. Редкий случай когда в перле что-то сделано абсолютно противоположно шеллу, однако данный подход более логичен(символы соответствуют цифрам, а буквы строкам). А вот что курили создатели шелла можно только гадать.
>>ещё бы понять, а где может понадобиться посимвольное сравнение..
>
>На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно
>спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для
>строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.об том и речь, что сравнить строку на эквивалентность другой строке - обычное дело
а посимвольно вычислять больше/меньше ещё надо придумать где
>>>ещё бы понять, а где может понадобиться посимвольное сравнение..
>>
>>На этот вопрос тяжело ответить, слишком элементарен. С тем же успехом можно
>>спросить где могут понадобится числовые сравнения. Хотя могу заметить, что для
>>строковых, по сравнению с числовыми, реже нужно le/lt/gt/lt и чаще eq/ne/cmp.
>
>об том и речь, что сравнить строку на эквивалентность другой строке -
>обычное дело
>а посимвольно вычислять больше/меньше ещё надо придумать гдеМдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще, с какой такой стати вы занялись написанием скриптов?
P.S. Посимвольное сравнение - сортировка строк. Опа! Или вы выше этого?
>Мдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще,
>с какой такой стати вы занялись написанием скриптов?с какой целью интересуетесь?
>P.S. Посимвольное сравнение - сортировка строк. Опа! Или вы выше этого?
сортировка в перле уже есть. когда будет её не хватать, напишу свой. тут каждому своё.. кто-то велосипеды лепит, кто-то реальные задачи решает, которые выхлоп имеют..
а вот посимвольного сравнения в моих задачах то и нет, поэтому буду юзать < > <= >= :)
>>Мдя... В школу бы вам вернуться, батенька... Алгоритмы бы поучить. И вообще,
>>с какой такой стати вы занялись написанием скриптов?
>
>с какой целью интересуетесь?Я думаю, тут все задаются этим вопросом. Потому что судя по тому, что вы пишете, программирование - как бы не совсем ваша сильная область. Честно говоря, это всё выглядит, как если бы человек пришёл на соревнования по лёгкой атлетике и спрашивал окружающих, как правильно кроссовки надевать. Конечно, ничто не помешало бы ему участвовать в соревнованиях, но выглядело бы это по меньшей мере странно.
>>с какой целью интересуетесь?
>
>Я думаю, тут все задаются этим вопросом. Потому что судя по тому,
>что вы пишете, программирование - как бы не совсем ваша сильная
>область. Честно говоря, это всё выглядит, как если бы человек пришёл
>на соревнования по лёгкой атлетике и спрашивал окружающих, как правильно кроссовки
>надевать. Конечно, ничто не помешало бы ему участвовать в соревнованиях, но
>выглядело бы это по меньшей мере странно.по-вашему, тут соревнования? :)
P.S. до 21 августа сего года, я даже на шелле не умел писать ничего.
>по-вашему, тут соревнования? :)Нет, по-моему то, что вы тут пишете, звучит странно, если не сказать, сюрреалистично. Но, в конце концов, это всё не относится к теме форума...
>а вот посимвольного сравнения в моих задачах то и нет, поэтому буду юзать < > <= >= :)Ну а в моих текущих задачах нет вообще никакой нужды в числовых сравнениях, так что теперь их убрать надо? А как вы отсортируете при помощи sort, но без cmp сложную структуру(например по $req->{answer}{name}) или скаляры и одномерные списки это пока ваш предел? С алфавитно-цифровыми наименованиями/нумерацией тоже не сталкивались, номер паспорта или автомобиля к примеру, не говоря уже про всевозможные формы/отчеты/постановления итд.
Кстати не исключен вариант, что в вашей задаче вообще не нужны сравнения, просто вы не владеете другими инструментами Perl ;)
>об том и речь, что сравнить строку на эквивалентность другой строке -
>обычное дело
>а посимвольно вычислять больше/меньше ещё надо придумать гдеСортировка по алфавиту уже давно существует. Не надо ее придумывать заново. ;-)
Другое дело, что в Perl нет необходимости реализовывать ее вручную, имея оператор sort.
Разве что для общего развития... :-)P. S. Пока писал, Андрей меня опередил. Прошу плагиатором не считать. :-)
>[оверквотинг удален]
>>а посимвольно вычислять больше/меньше ещё надо придумать где
>
>Сортировка по алфавиту уже давно существует. Не надо ее придумывать заново. ;-)
>
>Другое дело, что в Perl нет необходимости реализовывать ее вручную, имея оператор
>sort.
>Разве что для общего развития... :-)
>
>P. S. Пока писал, Андрей меня опередил. Прошу плагиатором не считать. :-)
>Честно признаюсь, перла не знаю :) Бог миловал. Но с другой стороны, знаю, что каждый начинающий кодер, как правило пытается сделать 3 вещи: написать свою мегаэффективную сортировку, написать свой мегаэффективный архиватор, написать свой мегаэффективный редактор. Иногда одно из перечисленных заменяется на мегаигруху. Знаю, потому что сам грешен :), правда меня хватило только на архиватор.
А сортировка - весщь коническая. Несколько раз по некоторым причинам пришлось свой алгоритм реализовывать. Так что, алгоритмы знать не помешает.
>Честно признаюсь, перла не знаю :) Бог миловал. Но с другой стороны,
>знаю, что каждый начинающий кодер, как правило пытается сделать 3 вещи:
>написать свою мегаэффективную сортировку, написать свой мегаэффективный архиватор, написать свой мегаэффективный
>редактор. Иногда одно из перечисленных заменяется на мегаигруху. Знаю, потому что
>сам грешен :), правда меня хватило только на архиватор.Как же без этого? :-) У меня товарищ, например, в свое время мегаСУБД делал на QuickBasic и
даже пытался как-то продвигать. Но народ что-то не хотел со всяких "Клипперов" слезать. :-)>А сортировка - весщь коническая. Несколько раз по некоторым причинам пришлось свой
>алгоритм реализовывать. Так что, алгоритмы знать не помешает.Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто необходимо
для того, чтобы не использовать ужасный qsort() на больших массивах данных (сразу оговорюсь - на
Си давно не пишу и не слежу за его развитием, поэтому на данный момент положение дел может
быть совсем другим).В Перле же sort реализован более эффективно, накладные расходы при его использовании гораздо
ниже, поэтому знание этих алгоритмов уже не вопрос жизни и смерти, а признак уровня культуры
и, как я уже сказал, общего развития программиста.
>Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто
>необходимо
>для того, чтобы не использовать ужасный qsort() на больших массивах данныхААА!!!! Телепаты на опеннете!!! Ты ЗНАЛ!!! Ты все ЗНАЛ!!! :D
>поэтому знание этих алгоритмов уже не вопрос жизни и смерти, а
>признак уровня культуры
>и, как я уже сказал, общего развития программиста.Так и я про тоже ))). Про общее развитие кодера. По этому и посоветовал повторить азы.
>Да я разве возражаю? В Си, например, знание алгоритмов сортировки было просто
>необходимо
>для того, чтобы не использовать ужасный qsort() на больших массивах данныхИ что же не так с сишным qsort? И сразу уточните, про какую libc вы говорите.
>И что же не так с сишным qsort?На малых объемах данных с ним все вполне себе "так". С большими же объемами алгоритм "пузырька",
который был реализован в qsort(), лучше не применять.>И сразу уточните, про какую libc вы говорите.
Это приказ? :-D
Я последний раз писал на Си в 1990 году. В моей организации использовался Borland Turbo C,
позже - Borland C++. Ни версий сред, ни тем более версий входивших в их состав библиотек
я не помню, а выяснять лениво, уж извините великодушно. :-)
>На малых объемах данных с ним все вполне себе "так". С большими
>же объемами алгоритм "пузырька",
>который был реализован в qsort(), лучше не применять.The qsort() function is a modified partition-exchange sort, or quicksort.
Пузырек там если и был, то только в абсолютно маргинальных реализациях.
>>И сразу уточните, про какую libc вы говорите.
>
>Это приказ? :-DПочему такая неадекватная реакция? Реализаций libc было море, и они как-бы многим различаются. А вы говорите примерно то же, что "автомобили не ездят", видев 20 лет назад единственный гнилой таз.
> Я последний раз писал на Си в 1990 году
В таком случае я бы на вашем месте постеснялся высказываться по этой теме.
>The qsort() function is a modified partition-exchange sort, or quicksort.
>
>Пузырек там если и был, то только в абсолютно маргинальных реализациях.Таки да, каюсь, память все же подвела...
Алгоритм Хоара, конечно, более совершенен, чем "пузырек", но при его применении к большим
массивам данных, неудачном выборе опорного элемента есть риск переполнить стек или просто
не дождаться конца сортировки. :-)>Почему такая неадекватная реакция? Реализаций libc было море, и они как-бы многим
>различаются. А вы говорите примерно то же, что "автомобили не ездят",
>видев 20 лет назад единственный гнилой таз.А тот же алгоритм Хоара за эти годы как-то изменился?
Если быть более точным, то я говорил не о том, что "автомобили не ездят", а о том, что они
"когда-то не всегда хорошо ездили, но не исключено, что сейчас ездят лучше". Согласитесь, есть разница.
Процитирую сам себя:
>(сразу оговорюсь - на Си давно не пишу и не слежу за его развитием, поэтому на данный момент
>положение дел может быть совсем другим)Кстати, а вы для сортировки используете только qsort() или пользуетесь и другими алгоритмами?
>В таком случае я бы на вашем месте постеснялся высказываться по этой
>теме.Да ради бога, будете на моем месте - стесняйтесь сколько угодно. ;-)
>Таки да, каюсь, память все же подвела...
>Алгоритм Хоара, конечно, более совершенен, чем "пузырек""Более совершенен"? Вообще-то NlogN против N^2.
>но при его применении к большим массивам данных, неудачном выборе
>опорного элемента есть риск переполнить стек или просто
>не дождаться конца сортировки. :-)А при применении пузырька мы гарантированно не дождемся конца сортировки, если уж на то пошло.
Почтитайте хотя бы это: http://ru.wikipedia.org/wiki/%D0%91%D1%8....
>"Более совершенен"? Вообще-то NlogN против N^2.
>Почтитайте хотя бы это: http://ru.wikipedia.org/wiki/%D0%91%D1%8....Читаем:
Недостатки:
Сильно деградирует по скорости (до Θ(n^2)) при неудачных выборах опорных элементов,
что может случиться при неудачных входных данных.
Ну и кроме того, время сортировки одного и того же набора данных может заметно отличаться
от раза к разу, что само по себе не катастрофа, но и не очень-то приятно. Впрочем, эти недостатки
как минимум частично можно устранить при реализации алгоритма.>А при применении пузырька мы гарантированно не дождемся конца сортировки, если уж на то пошло.
Да я разве спорю с этим? Если честно я вовсе ни с кем и ни с чем спорить не собирался. :-)
Просто захотел подкрепить примером тезис о том, что программисту крайне нежелательно
ограничивать свой кругозор стандартными средствами используемого языка. Очень даже допускаю,
что моя попытка вышла не слишком удачной. Засим предлагаю свернуть нашу дискуссию, как
исчерпавшую себя. Я вполне признаю вашу правоту и никоим образом не собираюсь на нее
посягать. Да и поднафлудили мы с вами тут уже. :-)
На тему аналогов sed и awk можно почитать
perldoc perlrun (http://perldoc.perl.org/perlrun.html)
и довольно неплохая, на мой взгляд, статья http://habrahabr.ru/blogs/perl/70610/