Ingo - I don't think you quite got Chris's point. For your particular application, in which you focus on displaying a subset/slice of data, you don't need to preserve data flow. But generally, if you wanted to manipulate a user-defined slice of data, you wouldn't want to either copy or sever, since that would break dataflow.
Also, some sort of evaluation on the slice *is* necessary in order to catch out-of-bounds slices. If you put the slice as well as a plot of that slice in your eval block, then the "+= 0" is redundant with the plotting, which should (I think) immediately update the plot and, in doing so, evaluate the slice within the eval block. By the way, my investigations here led me to discover a weird corner-case bug in the slice exception handling. Fortunately, that's not directly related to this. Fun times! David On Fri, Aug 23, 2013 at 8:43 AM, Ingo Schmid <[email protected]> wrote: > > Chris, > > I used sever instead of copy. > > Basically I'm copying David's code, btw. the +=0 isn't necessary to > catch the slice(). > > Thank you all. > > Ingo > > On 08/23/2013 01:47 PM, Chris Marshall wrote: > > Hi Ingo- > > > > The downside of the copy is that you lose > > dataflow (and it takes more memory). I > > can't test this out but you could use a > > "throw away" copy to preserve dataflow: > > > > eval { ($subset=$data->slice($b))->copy }; > > > > --Chris > > > > > > On Thu, Aug 22, 2013 at 9:06 AM, Ingo Schmid <[email protected]> wrote: > >> Thank you all for the helpful replies. This code did it for me: > >> > >> eval {$subset=$data->slice($b)->copy }; > >> if ($@) { > >> message "Wrong Slice string $@" ,mb::Error; > >> } else { > >> ... > >> > >> > >> Ingo > >> > >> On 08/21/2013 08:56 PM, David Mertens wrote: > >> > >> I'm not sure when a *bad* slice is caught, but an out-of-bounds slice > is not > >> caught until an actual evaluation. So, do a null operation, like adding > zero > >> in place. Note I use the eval { ... 1; } or do { ... }; idiom for > exception > >> handling, which I really like. It works just like a try/catch block, > and is > >> just as compact. > >> > >> my $slice; > >> eval { > >> $slice = $data->slice($string); > >> $slice += 0; > >> 1; > >> } or do { > >> croak("Bad slice string $string"); > >> }; > >> > >> This conflates a malformed string and an out-of-bounds error, which may > or > >> may not be what you want. But hopefully it's a start. > >> > >> David > >> > >> > >> On Wed, Aug 21, 2013 at 2:49 PM, Luis Mochan <[email protected]> > wrote: > >>> I believe you are missing quotes. The argument of eval is a string to > >>> be compiled and executed, as in > >>> eval ('$y=slice ($x,"0,8,,")') > >>> Regards, > >>> Luis > >>> > >>> > >>> On Wed, Aug 21, 2013 at 02:14:14PM +0000, Chris Marshall wrote: > >>>> I don't have a working PDL but I mean using > >>>> eval for exception trapping. Try looking at > >>>> the eval docs in perldoc -f eval or someone with > >>>> a working example.... > >>>> > >>>> On Wed, Aug 21, 2013 at 1:51 PM, Ingo Schmid <[email protected]> wrote: > >>>>> Chris, > >>>>> > >>>>> sorry, I get this. It never returns, just dies, apparently. > >>>>> > >>>>> pdl> help $x > >>>>> This variable is Double D [2,6,1,4] P 0.38KB > >>>>> pdl> eval (slice ($x,'0,8,,')) > >>>>> > >>>>> > >>>>> Runtime error: Stringizing problem: Slice cannot start or end above > >>>>> limit. eval {...} called at Basic/Core/Core.pm.PL (i.e. > >>>>> PDL::Core.pm) > >>>>> line 2969 > >>>>> PDL::string('PDL=SCALAR(0x4e242b0)', undef, '') called at (eval > >>>>> 581) > >>>>> line 5 > >>>>> > >>>>> > >>>>> > >>>>> On 08/21/2013 03:36 PM, Chris Marshall wrote: > >>>>>> eval ? > >>>>>> > >>>>>> On Wed, Aug 21, 2013 at 9:20 AM, Ingo Schmid <[email protected]> > wrote: > >>>>>>> Hi, > >>>>>>> > >>>>>>> I want a user to enter a string defining a slice of a piddle to > >>>>>>> extract. > >>>>>>> > >>>>>>> Now when I call > >>>>>>> > >>>>>>> > >>>>>>> $y=$x->slice($string) || barf "Not a valid slice\n"; > >>>>>>> > >>>>>>> that does not catch it. How do I catch it? > >>>>>>> > >>>>>>> Ingo > >>>>>>> > >>>>>>> _______________________________________________ > >>>>>>> Perldl mailing list > >>>>>>> [email protected] > >>>>>>> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > >>>>>>> > >>>> _______________________________________________ > >>>> Perldl mailing list > >>>> [email protected] > >>>> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > >>> -- > >>> > >>> o > >>> W. Luis Mochán, | tel:(52)(777)329-1734 /<(*) > >>> Instituto de Ciencias Físicas, UNAM | fax:(52)(777)317-5388 `>/ > /\ > >>> Apdo. Postal 48-3, 62251 | > (*)/\/ \ > >>> Cuernavaca, Morelos, México | [email protected] /\_/\__/ > >>> GPG: DD344B85, 2ADC B65A 5499 C2D3 4A3B 93F3 AE20 0F5E DD34 4B85 > >>> > >>> > >>> > >>> _______________________________________________ > >>> Perldl mailing list > >>> [email protected] > >>> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > >> > >> > >> > >> -- > >> "Debugging is twice as hard as writing the code in the first place. > >> Therefore, if you write the code as cleverly as possible, you are, > >> by definition, not smart enough to debug it." -- Brian Kernighan > >> > >> > >> _______________________________________________ > >> Perldl mailing list > >> [email protected] > >> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > >> > >> > >> > >> _______________________________________________ > >> Perldl mailing list > >> [email protected] > >> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > >> > > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > -- "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." -- Brian Kernighan
_______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
