LINUX.ORG.RU

как в перле передать дескриптор файла в подпрограмму и вернуть массив?


0

0

как вернуть массив я знаю, но как передать правильно дескриптор?

т.е. хочется чего-то типа этого:

open F,"<file.ext" or die "cant open: $!";

@m=descr(\*F);

close F;

print join "\n" => @m;

sub descr { local $\="\001"; @_=<F>; return @_; }

Каков вообще синтаксис таких вещей?

anonymous

нихера себе, вслепую написал 8-0 ... оно оказывается и работает еще... пепец...

А какие тут костыли то могут быть?

anonymous
()

У тебя F из глобала берется

а вообще вроде того: perl -e 'sub a { $f = shift; print $f "test\n" } &a(STDOUT)'

swizard
()

А вообще избавляйся от глобов, 21 век давно уже на дворе.

open $fh, "<file.ext" or die "cant open: $!";
@m=descr($fh);
close $fh;
print join "\n" => @m;

sub descr { 
  local $\="\001"; 
  @_=<shift>; 
  return @_; 
}

roller ★★★
()
Ответ на: комментарий от roller

вообще не хочет работать =(

[user@server cgi-bin]$ perl desc.pl Name "main::shift" used only once: possible typo at desc.pl line 10. readline() on closed filehandle main::shift at desc.pl line 10. [user@server cgi-bin]$ perl -v

This is perl, v5.6.0 built for i386-linux

чего я хочу, у меня есть файл с нестандартным разделителем строки \001 и я хочу считать в массив строки по разделителю \001

anonymous
()
Ответ на: комментарий от anonymous

open $fh, "<file.ext" or die "cant open: $!";
@m=descr($fh);
close $fh;
print join "\n" => @m;

sub descr { 
  $fh = shift;
  local $\="\001"; 
  @_=<$fh>; 
  return @_; 
}

roller ★★★
()

Ну куски как я делаю(может криво но как прямее не нашел):
prog.pl
.............
require "lib.pl"
$realnameinit=InitData($workday, "realname");
GetRealName($realnameinit,$workday,"?");
......
lib.pl
................
sub InitData($) {
local *FF;
my $path=shift;
my $file=shift;
open FF,"<$path" || die "cant' open file's";
return *FF;
}
............
sub GetRealName($$) {
my $handle=shift;
my $path=shift;
my $userid=shift;
my $str;
$str=<$handle>;
while (defined $str) {
next if (m/^#/);
next if (m/^\s+$/);
chomp $str;
..................
}
return @fval;

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.