BrAB> P. S. что нужно курить чтобы начать понимать регулярные выражения? или это только после просветления? [»]
да нет, практика

начинаешь с самых простых (в этом примере, как раз, ничего сложного) и понемногу усложняешь, усложняешь... Во-первых, perldoc perlre, во вторых - запросы на всяких форумах по Perl и т.п., можно тут у меня

Ну а потом свой опыт будет расти. Многого в регекспах я и сам ещё не умею

А по примеру, кстати, можно было и split использовать, просто с регекспом на строчку меньше будет и без явных временных переменных

/^(.+)\s+(.+)\s+(.+)/
/.../ - ограничители выражения
^ - искать от начала строки
(.+) - любые символы (".") от одного и больше ("+"), результат занести в системную переменную (первое упоминание - $1, второе - $2 и т.д.)
\s+ - пробел (точнее, пробелы, табуляции и т.п. - "\s") от одного и больше
Т.е. это выражение первую цепочку символов заносит в переменную $1, потом пропускает пробелы, потом - вторую цепочку в $2, опять игнорируем пробелы, третью - в $3.
$bytes{"$2-$1"} += int($3)
Добавляем в хеш по ключу вида "192.168.0.1-222.222.222.222" наш размер.
for(sort keys %bytes) - цикл по отсортированным ключам кеша
my($dest, $src) = split/\-/; - разрезаем ключ "192.168.0.1-222.222.222.222" по знаку "-" (экранируется слешем, т.к. первый аргумент split'а - регексп, а минус там значащий символ)
...
Что там ещё
while(<>) - это просто цикл по строкам входного потока.
Часто используется неявная переменная $_
for(sort keys %bytes)
Полный формат был бы for $key (sort keys %bytes) - переменной цикла была бы $key. Но мы её не указываем, цикл пойдёт с $_;
split/\-/; - полный формат "split /\-/, $var;", но если переменная не указана, то разделяться будет текущая переменная $_
Вроде, всё разобрал