Foo::
идентичен 'Foo'
за исключением того, что он предупреждает, если пакет не существует.
Вы можете отключить предупреждение, создав пакет. Оба следующих утверждения достигают этого:
{ package Foo; }
package Foo { } # 5.14+
Но это очень глупо. Зачем использовать синтаксис, который выполняет проверку пакета, если вы просто собираетесь игнорировать проверку? Было бы намного лучше использовать следующее:
my $self = bless({}, 'Foo');
Другой вариант -
no warnings qw( bareword );
my $self = bless({}, Foo::);
Это сигнализирует читателю, что вы знаете, что используете пакет, который несуществует еще.