#!perl -w use strict; use Ruby -all; $| = 1; # autoflush use Ruby -eval => <<'.'; def make_thread_ruby(id) Thread.new{ 5.times{|i| puts(" " * id + "Ruby: \##{id} #{i}"); Thread.pass; } "Tread(#{id}) done"; } end . sub make_thread_perl{ my $id = shift; Thread->new(sub{ 5->times(sub{ my $i = shift; puts " " x $id . " Ruby: $id $i"; }); return "Thread($id) done."; }); } #*make_thread = \&make_thread_perl; # doesn't work *make_thread = \&make_thread_ruby; my $thr1 = make_thread(1); my $thr2 = make_thread(2); my $thr3 = make_thread(3); my $thr4 = make_thread(4); my $thr5 = make_thread(5); foreach (0 .. 9){ puts("Perl:
$_"); Thread->pass; # This is required! } puts $thr1->join->value; puts $thr2->join->value; puts $thr3->join->value; puts $thr4->join->value; puts $thr5->join->value;