while (<>) { m/^(\w+)\s+(\d+)(.*)$/ or die; # You should # always check a regex before # using $1, etc. printf "%s %d %s", $1, (exists $disk{$1} ? 0 : $2+$partition), $3; }