{
$Treex::Core::Files::VERSION
=
'0.08302_1'
;
}
has
filenames
=> (
is
=>
'ro'
,
isa
=>
'ArrayRef[Str]'
,
writer
=>
'_set_filenames'
,
);
has
file_number
=> (
isa
=>
'Int'
,
is
=>
'ro'
,
writer
=>
'_set_file_number'
,
default
=> 0,
init_arg
=>
undef
,
documentation
=>
'Number of input files loaded so far.'
,
);
sub
BUILD {
my
(
$self
,
$args
) =
@_
;
return
if
$args
->{filenames};
log_fatal
'parameter "string" is required'
if
!
defined
$args
->{string};
$self
->_set_filenames(
$self
->string_to_filenames(
$args
->{string} ) );
return
;
}
sub
string_to_filenames {
my
(
$self
,
$string
) =
@_
;
return
[
map
{
$self
->_token_to_filenames(
$_
) }
split
/[ ,]+/,
$string
];
}
sub
_token_to_filenames {
my
(
$self
,
$token
) =
@_
;
return
$token
if
$token
!~ s/^@(.*)/$1/;
if
(
$token
eq
'-'
) {
$token
= \
*STDIN
;
}
my
@filenames
= read_file(
$token
,
chomp
=> 1 );
return
@filenames
;
}
sub
number_of_files {
my
(
$self
) =
@_
;
return
scalar
@{
$self
->filenames };
}
sub
current_filename {
my
(
$self
) =
@_
;
return
if
$self
->file_number == 0 ||
$self
->file_number > @{
$self
->filenames };
return
$self
->filenames->[
$self
->file_number - 1 ];
}
sub
next_filename {
my
(
$self
) =
@_
;
$self
->_set_file_number(
$self
->file_number + 1 );
return
$self
->current_filename();
}
coerce
'Treex::Core::Files'
=> from
'Str'
=> via { Treex::Core::Files->new(
string
=>
$_
) }
=> from
'ArrayRef[Str]'
=> via { Treex::Core::Files->new(
filenames
=>
$_
) };
1;