in reply to Previous Line Matching Issues
My approach involves using a simple data structure to tell you about the past -- a stack:
perl -e '@stack = (); sub notify { return qq~!!!!@_[0]!!!~}; for(qw~+ +- + - + - + + - +~) {push @stack, $_; (@stack[-2] ne $_ )? print 0 : + print notify(1) };'
What's happening here:
- You start with a list of intermittent signals; here just + or - that arrive sequentially
- We use a data structure that will tell us what the last n elements are in order
- If some criteria is met we can run some kind of notification. In our case what we want to know is if the current element matches the previous one.
One additional note: the first example essentially caches everything in the @stack. You can keep only what you need in there by discarding things at the head like this:
perl -e '@stack = (); sub notify { return qq~!!!!@_[0]!!!~}; for(qw~+ + - + - + - + + - +~) {push @stack, $_; (@stack[-2] ne $_ )? print 0 +: print notify(1); if (@stack >= 3){shift @stack} }; use Data::Dum +per; print Dumper \@stack;'
gives,
0000000!!!!1!!!00$VAR1 = [ '-', '+' ];
Celebrate Intellectual Diversity
|
---|
In Section
Seekers of Perl Wisdom