use Thread::Semaphore qw( ); use threads::shared qw( ); BEGIN { *sema_down = \&Thread::Semaphore::down; *sema_up = \&Thread::Semaphore::up; } my $line_semi : shared = 0; ... sema_down(\$line_semi, 1); ... sema_up(\$line_semi, 1);