http://jerusalempm.beamartyr.net/wiki/index.php?title=Special:Contributions&feed=atom&target=Amire80
JmPm - User contributions [en]
2024-03-29T02:35:26Z
From JmPm
MediaWiki 1.15.3
http://jerusalempm.beamartyr.net/wiki/index.php/User:Mrguy123
User:Mrguy123
2008-05-13T08:01:35Z
<p>Amire80: welcome</p>
<hr />
<div>Welcome to the Jerusalem Perl Mongers wiki!<br />
<br />
Please contact me if you have any problems. --[[User:Amire80|Amir E. Aharoni]] 11:01, 13 May 2008 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:Gabash
User talk:Gabash
2008-05-13T08:00:44Z
<p>Amire80: New page: Welcome to the Jerusalem Perl Mongers Wiki! --~~~~</p>
<hr />
<div>Welcome to the Jerusalem Perl Mongers Wiki! --[[User:Amire80|Amir E. Aharoni]] 11:00, 13 May 2008 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Main_Page
Main Page
2007-08-30T10:56:01Z
<p>Amire80: fmt</p>
<hr />
<div>== '''Jerusalem Perl Mongers''' ==<br />
We are a Perl user-group located in Jerusalem. <br />
<br />
We are Perl programmers, who love this language and are here to help each other by discussing several topics in our [[mailing list]] and in our monthly meetings.<br />
<br />
We work in a full co-operation with [http://perl.org.il Israel.pm], which is the Israeli Perl Mongers Group.<br />
<br />
'''Jerusalem Perl Mongers''' meetings take place (more or less) regularly every month. Read about [[Our last meeting]].<br />
<br />
'''[[Our next meeting]] is planned for August 30, 2007'''<br />
<br />
Anyone who wants to volunteer to speak at any meeting or has any ideas whatsoever on the subject is invited to write to [mailto:Jerusalem.Perl.Monger@gmail.com Jerusalem.Perl.Monger@gmail.com]<br />
<br />
Write ideas for lectures or topics of future meetings to the [[JmPm:Community Portal|Community Portal]]<br />
<br />
Lectures should be interesting to most levels of Perl knowledge, although this is difficult at times. They should be short enough to be over in 50 minutes including questions and comments which are encouraged, and long enough to be dragged out to at least 40 minutes.<br />
<br />
To see what we have been doing go to [[Previous meetings]]<br />
<br />
Here are some Perl code samples contributed by participants:<br />
* [[:Category:Sample code|Sample code]]<br />
<br />
Everyone is welcome to improve this wiki with content, design, etc. Every page can be edited, but you need to [[Special:Userlogin|create an account]].</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Java_from_Perl;_Perl_from_Java
Java from Perl; Perl from Java
2007-07-16T07:25:15Z
<p>Amire80: *</p>
<hr />
<div>== Perl - Java Similarities==<br />
* Interpreted languages<br />
* Platform independent (write once run anywhere)<br />
* Similar syntax (procedural languages)<br />
* Garbage collector<br />
* Modules and packages structure<br />
<br />
== Differences ==<br />
* Java 100% object oriented, in Perl OO is optional (function overloading does not exist)<br />
* Java requires compilation, Perl doesn’t<br />
* Java does not allow multiple inheritance, Perl does. (Object == UNIVERSAL)<br />
* Java has strong typing ( requires variable declaration ), Perl has not – variable gets it type after first assignment.<br />
* autoload mechanism <br />
* Do we need strong typing? (strong testing ?)<br />
* Java is rigid, Perl has many ways to say same thing<br />
* Perl has many shell like features (variable interpolation, file test operators). Java has none.<br />
* In Java execution starts in main(), Perl has no main, (__DATA__ feature)<br />
* Perl is much FASTER in development and execution<br />
<br />
== Why do we need it ? ==<br />
* Legacy components access<br />
* Code transition from some language to perl<br />
* Speed (C , not Java)<br />
* Component exist in other language and we want to use it in Perl<br />
<br />
== Inline ==<br />
* Inline, Inline::Java<br />
* Easy installation<br />
* Short learning curve<br />
* Hides all details (compilation, glue files)<br />
* Inline has extension to many other languages – C , C++ , Python ...<br />
* Older tools XS, SWIG.<br />
• Manual steps, long learning curve, only perl to XXX direction<br />
<br />
== Perl2Java ==<br />
* Methods invocation ( regular and static )<br />
* Member variables access<br />
* Study<br />
* Script or package code layout<br />
<br />
== inline::java steps ==<br />
* Creates java source file from the embedded code ( Hi.java )<br />
* Compiles java class ( Hi.java -> Hi.class )<br />
* Extracts the methods signatures to Hi.jdat file<br />
<br />
== Java2Perl ==<br />
* Implemented by Inline::Java::PerlInterpreter<br />
* Alternative implementation based on<br />
** JNI defines a standard naming and calling convention so the Java virtual machine can locate and invoke native methods <br />
** perl from C invocation , modified examples code from O’Reilly Advanced Perl Programming<br />
* Two basic problems :<br />
** Functions in perl can be called with variable number of parameters and output variable number of values<br />
** Parameters can have different types</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Meetings/2007-06-24
Meetings/2007-06-24
2007-07-16T07:22:17Z
<p>Amire80: ;</p>
<hr />
<div>= Jerusalem.pm Meeting June 24, 2007 =<br />
<br />
== Agenda ==<br />
<br />
'''כל ההרצאות בעברית'''<br />
<br />
* 18:00 – [[Java from Perl; Perl from Java]] - Shaul Zevin<br />
* 18:50 – Break<br />
* 19:00 – Meeting<br />
* 19:10 – [[Jerusalem Perl Mongers Contest| Perl Contest (with prizes]])- Rina Ron <br />
* 20:00 – '''The End'''<br />
<br />
== Reference ==<br />
'''Prizes for the contest-'''<br />
<br />
* first prize: a winner's tee shirt (XXL)<br />
* second prize: a (used) book - Perl and CGI<br />
* third prize: a small perl monger camel<br />
<br />
== Location ==<br />
[http://www.exlibris.co.il/offices.htm#israel Exlibris], Malcha Technological Park (Jerusalem) - Building 9, 4th floor - Large meeting room<br />
<br />
== Food ==<br />
כיבוד קל<br />
burekas, cake, fruit, soft drinks<br />
<br />
== Price ==<br />
Free of charge<br />
<br />
== Contact ==<br />
[mailto:Jerusalem.Perl.Monger@gmail.com send email to Jerusalem.Perl.Monger@gmail.com]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Meetings/2007-06-24
Meetings/2007-06-24
2007-07-16T07:21:25Z
<p>Amire80: cosmetic</p>
<hr />
<div>= Jerusalem.pm Meeting June 24, 2007 =<br />
<br />
== Agenda ==<br />
<br />
'''כל ההרצאות בעברית'''<br />
<br />
* 18:00 – [[Java from Perl Perl from Java]] - Shaul Zevin<br />
* 18:50 – Break<br />
* 19:00 – Meeting<br />
* 19:10 – [[Jerusalem Perl Mongers Contest| Perl Contest (with prizes]])- Rina Ron <br />
* 20:00 – '''The End'''<br />
<br />
== Reference ==<br />
'''Prizes for the contest-'''<br />
<br />
* first prize: a winner's tee shirt (XXL)<br />
* second prize: a (used) book - Perl and CGI<br />
* third prize: a small perl monger camel<br />
<br />
== Location ==<br />
[http://www.exlibris.co.il/offices.htm#israel Exlibris], Malcha Technological Park (Jerusalem) - Building 9, 4th floor - Large meeting room<br />
<br />
== Food ==<br />
כיבוד קל<br />
burekas, cake, fruit, soft drinks<br />
<br />
== Price ==<br />
Free of charge<br />
<br />
== Contact ==<br />
[mailto:Jerusalem.Perl.Monger@gmail.com send email to Jerusalem.Perl.Monger@gmail.com]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Java_from_Perl;_Perl_from_Java
Java from Perl; Perl from Java
2007-07-16T07:20:38Z
<p>Amire80: Java from Perl ; Perl from Java moved to Java from Perl; Perl from Java: space</p>
<hr />
<div>== Perl - Java Similarities==<br />
<br />
• Interpreted languages<br />
<br />
• Platform independent ( write once run anywhere )<br />
<br />
• Similar syntax ( procedural languages )<br />
<br />
• Garbage collector<br />
<br />
• Modules and packages structure<br />
<br />
<br />
<br />
== Differences ==<br />
<br />
• Java 100% object oriented , in Perl OO is optional ( function overloading does not exist )<br />
<br />
• Java requires compilation , Perl doesn’t<br />
<br />
• Java does not allow multiple inheritance , Perl does. ( Object == UNIVERSAL )<br />
<br />
• Java has strong typing ( requires variable declaration ), Perl has not – variable gets it type after first assignment.<br />
<br />
• autoload mechanism <br />
<br />
• Do we need strong typing ? ( strong testing ? )<br />
<br />
• Java is rigid , Perl has many ways to say same thing<br />
<br />
• Perl has many shell like features ( variable interpolation , file test operators ). Java has none.<br />
<br />
• In Java execution starts in main(), Perl has no main , ( __DATA__ feature )<br />
<br />
• Perl is much FASTER in development and execution<br />
<br />
<br />
== Why do we need it ? ==<br />
<br />
• Legacy components access<br />
<br />
• Code transition from some language to perl<br />
<br />
• Speed ( C , not Java )<br />
<br />
• Component exist in other language and we want to use it in Perl<br />
<br />
<br />
== Inline ==<br />
<br />
• Inline , Inline::Java<br />
<br />
• Easy installation<br />
<br />
• Short learning curve<br />
<br />
• Hides all details ( compilation , glue files )<br />
<br />
• Inline has extension to many other languages – C , C++ , Python …<br />
<br />
• Older tools XS , SWIG.<br />
<br />
• Manual steps, long learning curve , only perl to XXX direction<br />
<br />
<br />
== Perl2Java ==<br />
<br />
• Methods invocation ( regular and static )<br />
<br />
• Member variables access<br />
<br />
• Study<br />
<br />
• Script or package code layout<br />
<br />
<br />
== inline::java steps ==<br />
<br />
• Creates java source file from the embedded code ( Hi.java )<br />
<br />
• Compiles java class ( Hi.java -> Hi.class )<br />
<br />
• Extracts the methods signatures to Hi.jdat file<br />
<br />
<br />
<br />
== Java2Perl ==<br />
<br />
• Implemented by Inline::Java::PerlInterpreter<br />
<br />
• Alternative implementation based on<br />
<br />
– JNI defines a standard naming and calling convention so the Java virtual machine can locate and invoke native methods <br />
<br />
– perl from C invocation , modified examples code from O’Reilly Advanced Perl Programming<br />
<br />
• Two basic problems :<br />
<br />
– Functions in perl can be called with variable number of parameters and output variable number of values<br />
– Parameters can have different types</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:Amire80
User talk:Amire80
2007-07-08T09:49:41Z
<p>Amire80: hello</p>
<hr />
<div>Hello.<br />
<br />
Fell free to leave a message for me here.<br />
<br />
Use the + at the top of the page to start a new thread. Click [edit] near the title of a thread to add a new comment to an existing thread.<br />
<br />
Kindly sign your name using <nowiki>--~~~~</nowiki>. It will automatically to your name and time.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Bots
JmPm:Bots
2007-07-05T14:01:01Z
<p>Amire80: ]</p>
<hr />
<div>Bots are user accounts that can be used to perform automatic tasks.<br />
<br />
If you wrote a bot and would like to use it on this Wiki, please contact the [[JmPm:Administrators|bureaucrats]].<br />
<br />
For examples of MediaWiki bots, see [http://en.wikipedia.org/wiki/Wikipedia:Bots the page about bots on Wikipedia].</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Bots
JmPm:Bots
2007-07-05T14:00:51Z
<p>Amire80: hello</p>
<hr />
<div>Bots are user accounts that can be used to perform automatic tasks.<br />
<br />
If you wrote a bot and would like to use it on this Wiki, please contact the [[JmPm:Administrators|bureaucrats]].<br />
<br />
For examples of MediaWiki bots, see [http://en.wikipedia.org/wiki/Wikipedia:Bots the page about bots on Wikipedia]].</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Meorero
User:Meorero
2007-07-05T13:57:50Z
<p>Amire80: hello</p>
<hr />
<div><pre><br />
use strict;<br />
use warnings;<br />
</pre></div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Logic
User:Logic
2007-07-05T13:57:34Z
<p>Amire80: hello</p>
<hr />
<div><pre><br />
use strict;<br />
use warnings;<br />
</pre></div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Deer208
User:Deer208
2007-07-05T13:57:19Z
<p>Amire80: hello</p>
<hr />
<div><pre><br />
use strict;<br />
use warnings;<br />
</pre></div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Daniel
User:Daniel
2007-07-05T13:57:12Z
<p>Amire80: pre</p>
<hr />
<div><pre><br />
use strict;<br />
use warnings;<br />
</pre></div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Daniel
User:Daniel
2007-07-05T13:56:57Z
<p>Amire80: blank</p>
<hr />
<div>use strict;<br />
use warnings;</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Amire80-bot
User:Amire80-bot
2007-07-05T13:56:27Z
<p>Amire80: pwned</p>
<hr />
<div>I am owned by [[User:Amire80]]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:RvoO41
User talk:RvoO41
2007-07-05T09:50:36Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 12:50, 5 July 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Community_Portal
JmPm:Community Portal
2007-07-05T09:45:54Z
<p>Amire80: recreated after spam</p>
<hr />
<div>This is the community portal.<br />
<br />
It is a forum for discussions about the group, the wiki, the meetings and everything else.<br />
<br />
Feel free to add content.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Policy
JmPm:Policy
2007-07-03T13:01:52Z
<p>Amire80: policy</p>
<hr />
<div># Editing is permitted to registered users only to combat spam.<br />
# Registered users that can prove that they are human (not bots) and that they are not spammers or vandals can receive sysop and bureaucrat permissions.<br />
# Spam is not tolerated. All spam will be deleted and spamming accounts will be blocked.<br />
# Page which has nothing but spam in its history must be deleted.<br />
# Page which has both spam and useful information in its history should not be deleted. Useful information should be restored.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:WjbU6a
User:WjbU6a
2007-07-03T12:57:14Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Xt3A2r
User:Xt3A2r
2007-07-03T12:55:42Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Ye4Jya
User:Ye4Jya
2007-07-03T12:55:35Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:Tf9K57
User talk:Tf9K57
2007-06-21T09:35:47Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 12:35, 21 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:Yc5Roz
User talk:Yc5Roz
2007-06-21T09:35:42Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 12:35, 21 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Yc5Roz
User:Yc5Roz
2007-06-21T09:28:57Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Amire80
User:Amire80
2007-06-15T20:04:29Z
<p>Amire80: Have the appropriate amount of fun</p>
<hr />
<div>Hello.<br />
<br />
My name is Amir Elisha Aharoni and i am the local sysop and bureaucrat. Talk to me if you want permissions. I'm nice.<br />
<br />
You can [[Special:Emailuser/Amire80|email me]].<br />
<br />
If you're curious about me, try this:<br />
<br />
* [http://en.wikipedia.org/wiki/User:Amire80 English Wikipedia user page]<br />
* [http://he.wikipedia.org/wiki/User:Amire80 Hebrew Wikipedia user page]<br />
* my blog: [http://aharoni.wordpress.com/ Aharoni in Unicode, ya mama]<br />
<br />
Thanks for visiting.<br />
<br />
Have the appropriate amount of fun.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:43:24Z
<p>Amire80: Programming Perl, 3rd edition, Chapter 8.3.7</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
</pre><br />
<br />
# $n inaccessible from outside function<br />
# here $n always disappears<br />
# Or does it always???<br />
<br />
==Anonymous Function==<br />
<pre><br />
sub {<br />
...<br />
...<br />
...<br />
}<br />
</pre><br />
<br />
What is it good for?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
* See also: Programming Perl, 3rd edition, Chapter 8.3.7<br />
<br />
==Example - counter==<br />
<br />
<pre><br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter - use==<br />
<br />
<pre><br />
$c1 = create_cnt(); # cnt1<br />
$c2 = create_cnt(); # cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter – more interesting==<br />
<br />
<pre><br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
</pre><br />
<br />
Different start and delta:<br />
<br />
<pre><br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval==<br />
<br />
<pre><br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval - use==<br />
<br />
<pre><br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Regexes - Task==<br />
<br />
* For ‘12345678’<br />
* For any substring, e.g.34<br />
* Print char before, then substring, then char after, e.g 1234<br />
* Program to implement:<br />
<br />
'''Regexes – implementation 1'''<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
</pre><br />
<br />
Problem:<br />
* Regex is compiled for each substring<br />
* We cannot anticipate all substrings<br />
* Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}<br />
</pre><br />
<br />
<br />
[[Category:Sample code]]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:36:56Z
<p>Amire80: Category:Sample code</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
</pre><br />
<br />
# $n inaccessible from outside function<br />
# here $n always disappears<br />
# Or does it always???<br />
<br />
==Anonymous Function==<br />
<pre><br />
sub {<br />
...<br />
...<br />
...<br />
}<br />
</pre><br />
<br />
What is it good for?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
<br />
==Example - counter==<br />
<br />
<pre><br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter - use==<br />
<br />
<pre><br />
$c1 = create_cnt(); # cnt1<br />
$c2 = create_cnt(); # cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter – more interesting==<br />
<br />
<pre><br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
</pre><br />
<br />
Different start and delta:<br />
<br />
<pre><br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval==<br />
<br />
<pre><br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval - use==<br />
<br />
<pre><br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Regexes - Task==<br />
<br />
* For ‘12345678’<br />
* For any substring, e.g.34<br />
* Print char before, then substring, then char after, e.g 1234<br />
* Program to implement:<br />
<br />
'''Regexes – implementation 1'''<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
</pre><br />
<br />
Problem:<br />
* Regex is compiled for each substring<br />
* We cannot anticipate all substrings<br />
* Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}<br />
</pre><br />
[[Category:Sample code]]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:35:04Z
<p>Amire80: formatting</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
</pre><br />
<br />
# $n inaccessible from outside function<br />
# here $n always disappears<br />
# Or does it always???<br />
<br />
==Anonymous Function==<br />
<pre><br />
sub {<br />
...<br />
...<br />
...<br />
}<br />
</pre><br />
<br />
What is it good for?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
<br />
==Example - counter==<br />
<br />
<pre><br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter - use==<br />
<br />
<pre><br />
$c1 = create_cnt(); # cnt1<br />
$c2 = create_cnt(); # cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter – more interesting==<br />
<br />
<pre><br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
</pre><br />
<br />
Different start and delta:<br />
<br />
<pre><br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval==<br />
<br />
<pre><br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Interval - use==<br />
<br />
<pre><br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
</pre><br />
<br />
==Regexes - Task==<br />
<br />
* For ‘12345678’<br />
* For any substring, e.g.34<br />
* Print char before, then substring, then char after, e.g 1234<br />
* Program to implement:<br />
<br />
'''Regexes – implementation 1'''<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
</pre><br />
<br />
Problem:<br />
* Regex is compiled for each substring<br />
* We cannot anticipate all substrings<br />
* Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
<pre><br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}<br />
</pre></div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:28:41Z
<p>Amire80: /* Counter - use */ pre</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
my<br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
<br />
# $n inaccessible from outside function<br />
#here $n always disappears<br />
# Or does it always ???<br />
<br />
==Anonymous Function==<br />
sub {<br />
…<br />
…<br />
…<br />
}<br />
<br />
What is it good for ?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
<br />
==Example - counter==<br />
<br />
<pre><br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter - use==<br />
<br />
<pre><br />
$c1 = create_cnt(); # cnt1<br />
$c2 = create_cnt(); # cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter – more interesting==<br />
<br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
<br />
different start and delta<br />
<br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
<br />
<br />
==Interval==<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Interval - use==<br />
<br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Regexes - Task==<br />
<br />
• For ‘12345678’<br />
• For any substring, e.g.34<br />
• Print char before, then substring, then char after, e.g 1234<br />
• Program to implement:<br />
<br />
' ' 'Regexes – implementation 1' ' '<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
<br />
Probem<br />
• Regex is compiled for each substring<br />
• We cannot anticipate all substrings<br />
• Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:28:03Z
<p>Amire80: /* Example - counter */ pre</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
my<br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
<br />
# $n inaccessible from outside function<br />
#here $n always disappears<br />
# Or does it always ???<br />
<br />
==Anonymous Function==<br />
sub {<br />
…<br />
…<br />
…<br />
}<br />
<br />
What is it good for ?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
<br />
==Example - counter==<br />
<br />
<pre><br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
</pre><br />
<br />
==Counter - use==<br />
<br />
$c1 = create_cnt(); #cnt1<br />
$c2 = create_cnt(); #cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
<br />
==Counter – more interesting==<br />
<br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
<br />
different start and delta<br />
<br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
<br />
<br />
==Interval==<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Interval - use==<br />
<br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Regexes - Task==<br />
<br />
• For ‘12345678’<br />
• For any substring, e.g.34<br />
• Print char before, then substring, then char after, e.g 1234<br />
• Program to implement:<br />
<br />
' ' 'Regexes – implementation 1' ' '<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
<br />
Probem<br />
• Regex is compiled for each substring<br />
• We cannot anticipate all substrings<br />
• Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Closures
Closures
2007-06-14T14:27:37Z
<p>Amire80: /* Closure - basic */ pre, good bullets, link to HOP</p>
<hr />
<div>==Closure And its Usage==<br />
<br />
my<br />
sub xx {<br />
my $n;<br />
$n = 5<br />
}<br />
<br />
# $n inaccessible from outside function<br />
#here $n always disappears<br />
# Or does it always ???<br />
<br />
==Anonymous Function==<br />
sub {<br />
…<br />
…<br />
…<br />
}<br />
<br />
What is it good for ?<br />
<br />
==Closure - basic==<br />
<br />
Lets combine my + anonymous function<br />
<br />
<pre><br />
sub xx {<br />
my $n;<br />
return sub {<br />
$n++;<br />
}<br />
}<br />
</pre><br />
<br />
* $n not accessible outside xx<br />
* $n does not disappear, since anonymous function needs it.<br />
* For good explanation see [http://hop.perl.plover.com/ M.J. Dominus Higher Order Perl] pp. 71-79<br />
<br />
==Example - counter==<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
<br />
<br />
==Counter - use==<br />
<br />
$c1 = create_cnt(); #cnt1<br />
$c2 = create_cnt(); #cnt2<br />
$c1->(); <br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
<br />
sub create_cnt {<br />
my $start = 1;<br />
return sub {<br />
$start++;<br />
}<br />
}<br />
<br />
==Counter – more interesting==<br />
<br />
$c1 = create_cnt(1, 1);<br />
$c2 = create_cnt(7, 3);<br />
$c1->();<br />
$c1->();<br />
$c1->();<br />
$v1 = $c1->();<br />
$c2->();<br />
$c2->();<br />
$v2 = $c2->();<br />
print "v1 = $v1, v2 = $v2\n";<br />
<br />
<br />
different start and delta<br />
<br />
sub create_cnt {<br />
my ($start, $inc) = @_;<br />
my $current;<br />
return sub {<br />
$current = $current ? $current += $inc: $start;<br />
}<br />
}<br />
<br />
<br />
==Interval==<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Interval - use==<br />
<br />
my $t1 = time_int();<br />
my $t2 = time_int();<br />
for (1..4) {<br />
sleep(3);<br />
my $d1 = $t1->();<br />
print "$d1\n";<br />
}<br />
my $d2 = $t2->();<br />
print "$d2\n";<br />
<br />
<br />
sub time_int () {<br />
my $start = time();<br />
return sub (){<br />
my $current = time();<br />
my $diff = $current - $start;<br />
$start = $current;<br />
return $diff;<br />
}<br />
}<br />
<br />
==Regexes - Task==<br />
<br />
• For ‘12345678’<br />
• For any substring, e.g.34<br />
• Print char before, then substring, then char after, e.g 1234<br />
• Program to implement:<br />
<br />
' ' 'Regexes – implementation 1' ' '<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
my ($res) = $str =~ /(.?$cur.?)/;<br />
print "cur = $cur, res = $res\n"<br />
}<br />
<br />
Probem<br />
• Regex is compiled for each substring<br />
• We cannot anticipate all substrings<br />
• Closure to the rescue!<br />
<br />
==Regex with Closure==<br />
<br />
my @x = @ARGV;<br />
$str = '12345678';<br />
foreach $cur (@x) {<br />
unless (defined $regex{$cur}) {<br />
$regex{$cur} = sdd_regex($cur); # key substr, val closure<br />
print "create for $cur\n";<br />
}<br />
else {<br />
print "already exists for $cur\n";<br />
}<br />
my $res = $regex{$cur}->(\$str); # use closure<br />
print "cur = $cur, res = $res\n";<br />
}<br />
<br />
sub sdd_regex () {<br />
my $s = shift;<br />
my $reg = qr/(.?$s.?)/; ## compile once for substr<br />
sub () {<br />
my $str = shift;<br />
#my ($r) = $$str =~ /(.?$s.?)/;<br />
my ($r) = $$str =~ /$reg/;<br />
return $r;<br />
}<br />
}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Xiaohai
User:Xiaohai
2007-06-14T14:23:35Z
<p>Amire80: Protected "User:Xiaohai": chinese spammer [edit=sysop:move=sysop]</p>
<hr />
<div>{{Spammer}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Xiaohai
User:Xiaohai
2007-06-14T14:20:01Z
<p>Amire80: {{Spammer}}</p>
<hr />
<div>{{Spammer}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Template:Spammer
Template:Spammer
2007-06-14T14:18:36Z
<p>Amire80: This user has been blocked indefinitely for spamming.</p>
<hr />
<div>This user has been blocked indefinitely for spamming.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:SdhQyb
User talk:SdhQyb
2007-06-02T10:56:06Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 13:56, 2 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:TdrSkw
User talk:TdrSkw
2007-06-02T10:55:45Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 13:55, 2 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:ZggN1q
User talk:ZggN1q
2007-06-02T10:54:21Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 13:54, 2 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User_talk:XqzRm5
User talk:XqzRm5
2007-06-02T10:54:08Z
<p>Amire80: {{Suspspamtalk|blocker=Amire80}} --~~~~</p>
<hr />
<div>{{Suspspamtalk|blocker=Amire80}} --[[User:Amire80|Amir E. Aharoni]] 13:54, 2 June 2007 (IDT)</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Template:Suspspamtalk
Template:Suspspamtalk
2007-06-02T10:53:19Z
<p>Amire80: created template</p>
<hr />
<div>Hello.<br />
<br />
I have blocked you from editing this wiki, because I suspected that you are a spammer.<br />
<br />
If this is a mistake, please accept my apologies, [[Special:Emailuser/{{{blocker}}}|send me an email]] and I will unblock you.<br />
<br />
Thanks for understanding.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:ZggN1q
User:ZggN1q
2007-06-02T10:51:05Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:YmtWcu
User:YmtWcu
2007-06-02T10:50:59Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:XqzRm5
User:XqzRm5
2007-06-02T10:50:53Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:WemFkn
User:WemFkn
2007-06-02T10:50:47Z
<p>Amire80: {{Suspspamuser}}</p>
<hr />
<div>{{Suspspamuser}}</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Category:Suspected_spammers
Category:Suspected spammers
2007-06-02T10:47:56Z
<p>Amire80: This is a list of suspected spammers</p>
<hr />
<div>This is a list of suspected spammers.</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Template:Suspspamuser
Template:Suspspamuser
2007-06-02T10:47:33Z
<p>Amire80: created template</p>
<hr />
<div>This user is a suspected spammer.<br />
<br />
[[Category:Suspected spammers]]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/User:Dinmowei
User:Dinmowei
2007-06-02T10:44:55Z
<p>Amire80: Suspected spammer</p>
<hr />
<div>Suspected spammer</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/Main_Page
Main Page
2007-04-19T14:11:13Z
<p>Amire80: changed the next meeting look</p>
<hr />
<div>== '''Jerusalem Perl Mongers''' ==<br />
We are a Perl user-group located in Jerusalem. <br />
<br />
We are Perl programmers, who love this language and are here to help each other by discussing several topics in our [[mailing list]] and in our monthly meetings.<br />
<br />
We work in a full co-operation with [http://perl.org.il Israel.pm], which is the Israeli Perl Mongers Group.<br />
<br />
'''Jerusalem Perl Mongers''' meetings take place regularly every month.<br />
<br />
'''[[Our next meeting]] is planned for April 25, 2007'''<br />
<br />
Anyone who wants to volunteer to speak at any meeting or has any ideas whatsoever on the subject is invited to write to [mailto:Jerusalem.Perl.Monger@gmail.com Jerusalem.Perl.Monger@gmail.com]<br />
<br />
Write ideas for lectures or topics of future meetings to the [[JmPm:Community Portal|Community Portal]]<br />
<br />
Lectures should be interesting to most levels of Perl knowledge, although this is difficult at times. They should be short enough to be over in 50 minutes including questions and comments which are encouraged, and long enough to be dragged out to at least 40 minutes.<br />
<br />
To see what we have been doing go to [[Previous meetings]]<br />
<br />
Here are some Perl code samples contributed by participants:<br />
* [[:Category:Sample code|Sample code]]<br />
<br />
Everyone is welcome to improve this wiki with content, design, etc. Every page can be edited, but you need to [[Special:Userlogin|create an account]].</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Bureaucrats
JmPm:Bureaucrats
2007-04-19T14:06:05Z
<p>Amire80: created the page</p>
<hr />
<div>'''Bureaucrats''' in a wiki are users who can change other users' privileges.<br />
<br />
For a list of current bureaucrats, see [[JmPm:Administrators#Current sysops and bureaucrats|Current sysops and bureaucrats]].<br />
<br />
If you would like to be a bureaucrat yourself, please leave a message at the [[JmPm:Sysops' message board|sysops' message board]].</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Administrators
JmPm:Administrators
2007-04-19T14:04:09Z
<p>Amire80: created the page</p>
<hr />
<div>'''Sysops''' or '''administrators''' in a wiki are the users who have the following permissions:<br />
<br />
# Blocking and unblocking users<br />
# Protecting and unprotecting pages<br />
<br />
See also: [[JmPm:Bureaucrats|bureaucrats]].<br />
<br />
If you would like to be a sysop yourself, please leave a message at the [[JmPm:Sysops' message board|sysops' message board]].<br />
<br />
==Current sysops and bureaucrats==<br />
# [[User:Amire80|Amir E. Aharoni]]<br />
# [[User:Issac|Issac]] - also the server maintainer<br />
# [[User:Rina|Rina Ron]]</div>
Amire80
http://jerusalempm.beamartyr.net/wiki/index.php/JmPm:Sysops%27_message_board
JmPm:Sysops' message board
2007-04-19T14:03:45Z
<p>Amire80: addded Asking for permissions</p>
<hr />
<div>__NEWSECTIONLINK__<br />
Hello.<br />
<br />
This is the sysops' message board.<br />
<br />
This is the place to ask for:<br />
<br />
# Page protection<br />
# User blocking and unblocking<br />
# Asking for [[JmPm:Administrators|sysop]] and [[JmPm:Bureaucrats|bureaucrat]] permissions<br />
<br />
To leave a new message, click the + at the top of the page. Please sign your name at the end of the message by writing <nowiki>--~~~~</nowiki>.<br />
<br />
Thanks for being here.</div>
Amire80