sub warn { my @messages = @_; unless (@messages) { @messages = "Warning: something's wrong"; } if ($messages[-1] !~ /\n$/) { my ($package, $file, $line) = caller(); $messages[-1] .= " at $file line $line\n"; } if ($SIG{__WARN__}) { $SIG{__WARN__}->(@messages); } else { print STDERR @messages; } }