use strict; 下で、変数を my で宣言せずに使うと出ます。タイプミスした変数名が黙って別変数になる事故を防ぐための仕組みです。
出るコード
use strict;
$message = "Hello"; # my が無い
print "$message\n";
エラーメッセージ
Global symbol "$message" requires explicit package name (did you forget to declare "my $message"?) at script.pl line 2.
直し方
変数は初出時に my で宣言します(my $message = "Hello";)。配列は my @a、ハッシュは my %h。