#fixed codes
$panel = Panel->new(
-length => 1000,
-width => 10,
);
#dynamic codes
my $obj1 = Object::Generic->new(
-start => 10,
-end => 10,
-display_name => 'C'
);
my $obj2 = Object::Generic->new(
-start => 88,
-end => 89,
-display_name => 'T'
);
...
my $objn = Object::Generic->new(
-start => p,
-end => q,
-display_name => 'N'
);
$panel->add_obj($obj1);
$panel->add_obj($obj2);
...
$panel->add_obj($objn);
my $panel = Panel->new(...);
my @arr = ([10,10,'C'],[88,89,'T'],...);
for my $e (@arr) {
my $obj = Object::Generic->new(
-start=>$e->[0],
-end=>$e->[1],
-display_name=>$e->[2],
);
$panel->add_obj($obj);
}
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank, Thanks a lot for your response. Indeed, @arr is not known beforehand
and the content of @arr is generated by another perlscript. How would you
recommend to bridge these 2 perlscripts? The first one, I store the 10, 88,
...; 10, 89, ...; and C, T, ... into separate arrays, say @a1, @a2, @a3. A
simple but dirty way is to copy the contents of the 1st file to the 2nd and
then @arr = (@a1, @a2, @a3), but this does not look to be a good practice.
To copy @a1, @a2, @a3 this way would not work.
Copying is not necessary. Try this:
for (my $i = 0; $i < @a1; $i++) {
my $obj = Object::Generic->new(
-start=>$a1[$i],
-end=>$a2[$i],
-display_name=>$a3[$i],
But can I use a for loop to achieve the following effect? I guess I can't
simply code:
$panel->add_track([@obj],
-label => 1,
);
$panel->add_track([$obj1,$obj2,$obj3, ..., $objn],
-label => 1,
);
Can't tell. What expects add_track() as second parameter?
(first parameter is the ref to the panel-Object)
It can accept a number of objects $obj1,$obj2, ..., $objn in square
brackets. the problem is that "n" is unknown beforehand, and therefore can't
be hard-coded. I know that in Matlab a function called repmat may help...
$panel->add_track(\@obj,...);
Quoth "Rose" <ro...@russ.org>:
> "Frank Seitz" <devnu...@web.de> wrote in message
> news:639qr2F...@mid.individual.net...
> > Rose wrote:
> >>
> >> But can I use a for loop to achieve the following effect? I guess I can't
> >> simply code:
> >> $panel->add_track([@obj],
> >> -label => 1,
> >> );
> >>
> >> $panel->add_track([$obj1,$obj2,$obj3, ..., $objn],
> >> -label => 1,
> >> );
> >
> > Can't tell. What expects add_track() as second parameter?
> > (first parameter is the ref to the panel-Object)
>
> It can accept a number of objects $obj1,$obj2, ..., $objn in square
> brackets. the problem is that "n" is unknown beforehand, and therefore can't
> be hard-coded. I know that in Matlab a function called repmat may help...
If you have an array
@obj = (1, 2, 3, 4);
then the expression
[1, 2, 3, 4]
is exactly equivalent to
[@obj]
. This is generally true: whenever you have a series of comma-separated
items in list context, you can insert an array into the list and it will
be interpolated. The exception is the argument lists of functions like
'push' which have prototypes and so treat literal arrays specially.
Under many circumstances, it would be better to use
\@obj
as this doesn't make a copy of the array. You can do this if you know
the function you are calling doesn't modify the passed-in array (or if
you don't care if it trashes @obj).
Note that @obj is *not* equivalent to
$obj1, $obj2, $obj3, ...
if you were thinking that; $obj[1] is not the same as $obj1. If those
variables weren't just an example, they should have been in an array to
start with.
I would suggest you read perldoc perldsc and perldoc perlreftut.
Ben
In the first script, write the array to a text file, values space
separated with each list on a new line, like this:
20 30 A
40 50 B
60 70 C
... etc
In the second script, read in the file line by line and recreate the
data structure possibly as an array composed of array references.
I assume that you can read and write to a text file in your directory,
and that you will overwrite the same file each day so you can use
static file names.
CC
Do they need to be separate scripts? Are they run at different times? If
you are using separate scripts simply as a way of putting the code in
separate files, you may want to use modules instead.
The easy and straightforward way to pass data from Perl to Perl is the
use the Storable module, which is core as of 5.8. In the first script
you say
use Storable qw/store/;
store \@arr, 'file' or die "store failed";
and then in the second
use Storable qw/retrieve/;
my $aref = retrieve 'file' or die "retrieve failed";
If you want the data to be human-readable, or readable from another
language, you could use YAML instead.
Ben