Thanks for your help, shlomi. > 1. There's no such thing as IOScalar. Maybe you mean writing to an in-memory > buffer.
Yes, in-memory buffer. That's what I meant. > 2. Don't use threads in Perl. They cause too many problems. Is there any workaround? to make multi-thread script without 'use threads'? > 4. Please add "use warning;" to your code and correct all warnings. There were warnings with the sample script I attached but I couldn't correct it :-( So I changed the idea, using in-memory buffer inside child sub-routine. This worked. <<< #!perl use strict; use warnings; use threads ('yield', 'stack_size' => 64*4096, 'exit' => 'threads_only', 'stringify'); my @result; my @thr; for (my $i = 0; $i < 10; $i++) { $thr[$i] = threads->create(sub{my $i = shift; my $buf; open my $fh, ">:scalar", \$buf; print $fh "test$i"; close $fh; return \$buf; }, $i); } for (@thr) {push @result, $_->join();} for (@result) { print $$_, "\n"; } Thanks again. 2010年3月23日22:12 Shlomi Fish <shlo...@iglu.org.il>: > Hi iizuka! > > On Tuesday 23 Mar 2010 09:53:54 iiz...@sizk.net wrote: >> I'm trying to make threaded Net::Telnet program. >> I want all "input_log" to be written to one file. >> So I tried to give an IOScalar FileHandle to "input_log", then output real >> file later. IOScalar works fine, threads works fine. >> But together dosen't work. >> Here is sample script. >> Any suggestions appreciated. >> > > A few notes: > > 1. There's no such thing as IOScalar. Maybe you mean writing to an in-memory > buffer. > > 2. Don't use threads in Perl. They cause too many problems. > > 3. Don't use the FileHandle module. It is deprecated. Look at lexical > filehandles and IO::Handle instead. > > 4. Please add "use warning;" to your code and correct all warnings. > > Regards, > > Shlomi Fish > >> # works fine without threads >> use strict; >> use FileHandle; >> >> my @result; >> for (my $i = 0; $i < 10; $i++) { >> my $fh = new FileHandle \($result[$i]), '>:scalar'; >> $fh->print("test$i"); >> $fh->close(); >> } >> for (@result) { >> print $_, "\n"; >> } >> ----- >> # no output with threads >> use strict; >> use FileHandle; >> use threads ('yield', >> 'stack_size' => 64*4096, >> 'exit' => 'threads_only', >> 'stringify'); >> >> my @result; >> my @thr; >> for (my $i = 0; $i < 10; $i++) { >> my $fh = new FileHandle \($result[$i]), '>:scalar'; >> $thr[$i] = threads->create(sub{$_[0]->print($_[1]);$_[0]->close()}, >> $fh, >> "test$i"); >> } >> for (@thr) {my $dummy = $_->join();} >> for (@result) { >> print $_, "\n"; >> } > > -- > ----------------------------------------------------------------- > Shlomi Fish http://www.shlomifish.org/ > Why I Love Perl - http://shlom.in/joy-of-perl > > Deletionists delete Wikipedia articles that they consider lame. > Chuck Norris deletes deletionists whom he considers lame. > > Please reply to list if it's a mailing list post - http://shlom.in/reply . > -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/