while (<>){ # do some stuff if (defined $fhs{$conn}){ local *FH = $fhs{$conn}; print FH $_; } else { local *FH; open(FH, '>', "conn-$conn") or die($!); print FH $_; $fhs{$conn} = \*FH{IO}; } }