I was reading Gabor blog and found an interesting article having the calender of events scheduled for Perl in 2011 month wise.
Thanks to Gabor for making this.
I was reading Gabor blog and found an interesting article having the calender of events scheduled for Perl in 2011 month wise.
Thanks to Gabor for making this.
Wikipedia says Backtracking is a general algorithm for finding all (or some) solutions to some computational problem, that incrementally builds candidates to the solutions, and abandons each partial candidate c (“backtracks”) as soon as it determines that cannot possibly be completed to a valid solution.
What it meant for Perl:
In fact Backtracking mechanism is core functionality of languages like PROLOG. Perl implements it using regex engine.
Adding backtracking mechanism to our programming arsenal will bring alot of new functionality. This will help us solve problems that otherwise cost us alot of time and effort.
A fundamental feature of Perl regular expression matching involves the notion called backtracking, which is currently used (when needed) by all regular non-possessive expression quantifiers, namely * , *? , + ,+?, {n,m}, and {n,m}?. Backtracking is often optimized internally.
For a regular expression to match, the entire regular expression must match, not just part of it. So if the beginning of a pattern containing a quantifier succeeds in a way that causes later parts in the pattern to fail, the matching engine backs up and recalculates the beginning part–that’s why it’s called backtracking.
I will try to explain backtracking with an example in my next post.
Thanks
[brightcove vid=724203979001&exp3=651017566001&surl=http://c.brightcove.com/services&pubid=115485138001&pk=AQ~~,AAAAGuNzXFE~,qu1BWJRU7c26MMkbB19ukwmFB5ysvYz5&w=300&h=225]
Bigthink have many expert talks on Perl by Larry Wall.
Enjoy!
A Perl 6 book is in development on github. One can try and fork source code. You can catch the authors on
#perl6book on irc.freenode.net. For more info like steps to build the book, pl see the README on github.
PDF versions of this book can be found at
http://puffin.ch/perl/6/ and http://github.com/perl6/book/downloads
Hello,
While doing Ajax Perl application development, I came across an interesting article on the following link.
The article demonstrate with an example how Ajax can be used with Perl. In the example given, there is table containing Student names and Marks. Every row has an Edit button, by which user can edit the information for that row. THE DB used is Microsoft Access to keep things simple. In order to run the below example code you will have to create a table by the name “Student” in MS Access”. It should have the following columns.
Column Name Data type Sl_No(Primary Key) Number Name Text Marks Number
Also you need to create a DSN by the name “mydsn” pointing to the Access DB.
The basic logic here used in the example is that we have two separate rows for View and Edit (for every Student). Initially we hide the Edit row (by using style=”display:none”) and display the View Row(by using style=”display:block”). When the user clicks on the “Edit” button, the View row becomes hidden and the Edit row is displayed. We have used JavaScript to toggle between the rows. Below is the code snippet used in files (AjaxExample.pl and student.js).
============================================================
AjaxExample.pl
============================================================
#!perl
use DBI qw(:sql_types);
use CGI;
use CGI qw/:standard/;
use CGI::Ajax;
my $cgi = new CGI();
#——————————————————————–
# Mapping the Perl subroutine to the triggering function
#——————————————————————–
my $ajax = new CGI::Ajax( ‘saveStudInfo_JScript’ => &saveStudInfo_PerlScript );
$cgi->header(-charset=>’US-ASCII’);
print $ajax->build_html($cgi,&generateHTML);
#——————————————————————–
# Subroutine which generates the HTML
#——————————————————————–
sub generateHTML {
# Hash which contains existing data
%Students = get_Student_Info();
$cnt = 1;
# Write the html code in the form of a string
$returnHTML .= ”n<HTML>”;
$returnHTML .= ”n<HEAD>”;
$returnHTML .= ”n<TITLE>Student Information</TITLE>”;
$returnHTML .= ”<SCRIPT language=”javascript” src=”/javascript/student.js” type=”text/javascript”></SCRIPT>”;
$returnHTML .= ”n</HEAD>”;
$returnHTML .= ”n<BODY bgColor=”#ffffff”>”;
$returnHTML .= ”<FORM method=”POST” enctype=”multipart/form-data” name=”StudentForm”>”;
$returnHTML .= “n<BR>”;
$returnHTML .= “n<BR>”;
$returnHTML .= “n<TABLE cellspacing=”0″ cellpadding=”0″ align=”center”>”;
$returnHTML .= “n<TR><TD>”;
$returnHTML .= “n<TABLE width=”100%” align=”center” border=”1″ cellpadding=”3″ cellspacing=”1″ id= “StudentInfoTable”>”;
$returnHTML .= “n<TR>”;
$returnHTML .= “n<TD align=”center” >SL No</TD>”;
$returnHTML .= “n<TD align=”center” nowrap>Name </TD>”;
$returnHTML .= “n<TD align=”center” nowrap>Marks </TD>”;
$returnHTML .= “n<TD align=”center” > </TD>”;
$returnHTML .= “n</TR >”;
foreach $key (sort { $a <=> $b }(keys %Students)) {
#View row
$returnHTML .= ”n<INPUT type=”hidden” name=”SerialNo” id=”SerialNo_$key” value=”$key”>”;
$returnHTML .= “n<TR style=”display:block”>”;
$returnHTML .=”n<TD align=”center” >$key</TD>”;
$returnHTML .=”n<TD align=”center” nowrap><Div id=”Div_Name_$key”>”. (($Students{$key}->{Name}) ? $Students{$key}->{Name} : “ ”).”</DIV></TD>”;
$returnHTML .=”n<TD align=”center” nowrap><Div id=”Div_Marks_$key”>”. (($Students{$key}->{Name}) ? $Students{$key}->{Marks} : “ ”).”</DIV></TD>”;
$returnHTML .= “n<TD align=”center”><INPUT type=”button” name=”EditButton” value=”Edit” style=”cursor: hand; width: 40px” onClick=”makeRowEditable($cnt,’StudentInfoTable’)”></TD>”;
$returnHTML .= “n</TR >”;
#Edit row
$returnHTML .= “n<TR style=”display:none”>”;
$returnHTML .=”n<TD align=”center” nowrap>$key</TD>”;
$returnHTML .=”n<TD align=”center” nowrap><INPUT type=”text” size=”30″ id=”Student_Name_$key” value=”$Students{$key}->{Name}” style=”text-align: center”></TD>”;
$returnHTML .=”n<TD align=”center” nowrap><INPUT type=”text” size=”10″ id=”Student_Marks_$key” value=”$Students{$key}->{Marks}” style=”text-align: center”></TD>”;
$returnHTML .= “n<TD align=”center”><INPUT type=”button” name=”SaveButton” value=”Save” style=”cursor: hand; width: 40px” onClick=”saveStudInfo_JScript(['Student_Name_$key','Student_Marks_$key','SerialNo_$key','NO_CACHE'],['Div_Name_$key','Div_Marks_$key'],’POST’);makeRowViewable($cnt,’StudentInfoTable’)”></TD>”;
$returnHTML .= “n</TR >”;
$cnt += 2;
}
$returnHTML .= “n</TABLE>”;
$returnHTML .= “n</TD></TR>”;
$returnHTML .= “n</Table>”;
}
#——————————————————————–
# Perl Subroutine which is called aschronously
#——————————————————————–
sub saveStudInfo_PerlScript {
# Accept Input
my $Name = shift;
my $Marks = shift;
my $SerialNo = shift;
# Call subroutine which does database update
update_Student_Info($SerialNo,$Name,$Marks);
# Return Output
return (@Return, ($Name ne “”) ? $Name : “ ”,($Marks ne “”) ? $Marks : “ ”);
}
#——————————————————————–
# Subroutine which fetches the data
#——————————————————————–
sub get_Student_Info {
my %Details;
my ($sql, $sth, $row);
# DSN with the name “mydsn” points to the Db
$DB = “mydsn”;
# User name and password if any need to be specified. Currently no user name and pwd set.”;
$DB_USER = “”;
$DB_PASS= “”;
$dbh = DBI->connect(“dbi:ODBC:$DB”, $DB_USER, $DB_PASS);
$sql = “SELECT * FROM Student”;
$sth = $dbh->prepare($sql);
$sth->execute;
$cnt = 1;
while ($row = $sth->fetchrow_hashref) {
$Details{$cnt++} = $row;
}
$sth->finish();
return %Details;
}
#——————————————————————–
# Subroutine which updates the Student Table in DB
#——————————————————————–
sub update_Student_Info {
my $SerialNo = shift;
my $Name = shift;
my $Marks = shift;
my ($sql, $sth,$row);
# DSN with the name “mydsn” points to the Db
$DB = “mydsn”;
# User name and password if any need to be specified. Currently no user name and pwd set.
$DB_USER = “”;
$DB_PASS= “”;
$dbh = DBI->connect(“dbi:ODBC:$DB”, $DB_USER, $DB_PASS);
$sql = “Update Student set Name = ‘$Name’,Marks = $Marks where Sl_No = $SerialNo “;
$sth = $dbh->prepare($sql);
$sth->execute;
$sth->finish();
return $sql;
}
============================================================
student.js
============================================================
/*
* Toggles the rows from EDIT mode to VIEW mode.
* Invoked on clicking the ‘SAVE’ button in last column.
*/
function makeRowViewable(rowNumber,id) {
var table = document.all ? document.all[id] : document.getElementById ? document.getElementById(id) : null;
var editableRowNumber = rowNumber + 1 ;
var nonEditableRowNumber = editableRowNumber -1 ;
table.rows[editableRowNumber].style.display = “none” ;
table.rows[nonEditableRowNumber].style.display = “block” ;
}
/*
* Toggles the rows from view mode to edit mode.
* Invoked on clicking the ‘EDIT’ button in last column.
*/
function makeRowEditable(rowNumber,id) {
var table = document.all ? document.all[id] : document.getElementById ? document.getElementById(id) : null;
var editableRowNumber = rowNumber + 1 ;
var nonEditableRowNumber = editableRowNumber -1 ;
table.rows[editableRowNumber].style.display = “block” ;
table.rows[nonEditableRowNumber].style.display = “none” ;
}
As we know, the term Ajax stands for ‘Asynchronous JavaScript And XML’. It is not a technology but a set of technologies being used together in a particular way. With effective use of existing technologies like HTML, DHTML, DOM, CSS, JavaScript one can make web pages more dynamic and interactive.
Using JavaScript, Ajax makes an asynchronous call to the server and fetches an XML document from a server-side component. Upon completion of the request, JavaScript may be used to update or modify the Document Object Model (DOM) of the HTML page. Only the necessary portions of the HTML DOM are re-rendered in the HTML page. In short Ajax techniques let you update parts of your web page without reloading the whole page.
The general benefit here is that an asynchronous operation executes in a separate thread. So when an operation is triggered asynchronously by the application, it can continue executing while the asynchronous method performs its task. Moreover only the data that needs to be updated or inserted can be sent instead of sending the entire form data. Perl Ajax framework are also available for faster development and test.
Popular web applications like Gmail, Amazon, Orkut etc are using Ajax.
References and more links:
Simple Example demonstrating Ajax Implementation using Perl « Perl recipes « ActiveState Code.
http://www.perl.com/pub/2006/03/02/ajax_and_perl.html
http://perl.about.com/b/2006/03/17/using-ajax-from-perl.htm
http://ajaxpatterns.org/Perl_Ajax_Frameworks
http://search.cpan.org/~bpederse/CGI-Ajax-0.707/
Enjoy using Ajax from Perl.
Hi
While watching a Perl 6 video on YAPC::EU 2010, I was wondering if year 2010 is going to be big for development in Perl programming or more specifically in Modern Perl based development (Moose,Catalyst etc). There are many new exciting module on Moose/MooseX, DBIx::class, Catalyst etc are uploaded on CPAN every month. I think the biggest news is the release of long awaited Rakudo Star in July 2010. This is a stable, usable Perl 6 implementation on Parrot Virtual Machine. Congratulations to all developers/testers of this project. One can download the tar ball the release from Github. I am going to explore and develop some applications using this exciting new language Perl 6.
I will try to show some exciting features of Perl 6 in my next post.
Happy programming!
While browsing CPAN I found an intersting module by Tatsuhiko Miyagawa cpanminus. Basically, this is a script to get, unpack, build and install modules from CPAN. The best part of is it’s dependency free, requires zero configuration, and stands alone. When running, it requires only 10MB of RAM. [Source: CPAN]
There are Debian packages, RPMs, FreeBSD ports, and packages for other operation systems available. If you want to use the package management system, search for cpanminus and use the appropriate command to install.
You can also build from latest source itself.
I have tried it on my CentOs 4.6 and Windows XP machine. Some of the advantages which I can see at first place are:
Will try to get some more findings.
Cheers,
Hello,
If you ask me about the best features of Perl then there will be many answers CPAN, Hashes, RegX etc etc but the one of the hidden feature of perl is The Schwartzian Transform. This is a technique that allows you to efficiently sort by a computed, secondary index. Let’s say that you wanted to sort a list of strings by their md5 sum. Pl. see the code below (the comments below are best read from bottom).
my @strings = (‘C’, ‘CPlusPlus’, ‘Java’, ‘Perl’);
my $sorted_strings_on_MD5 =
map { $_->[0] } # map back to the original value
sort { $a->[1] cmp $b->[1] } # sort by the correct element of the list
map { [$_, MD5Calu_func($_)] } # create a list of anonymous lists
@strings # take strings
Where MD5Calu_func($_) represents an expression that takes $_ (each item of the list in turn) and produces the corresponding value that is to be compared. This way, you only have to do the expensive md5 computation N times, rather than N log N times. That’s the beauty of algorithm.
The algorithm has been given by one of the greatest guy is Perl community Randal L. Schwartz.
Happy reading!
Where Tcl and Tk Went Wrong http://journal.dedasys.com/2010/03/30/where-tcl-and-tk-went-wrong – a very important read for every Perl programmer!
Just read a nice and clear tutorial on Unicode in Perl by Mark Rajcok.
http://en.wikibooks.org/wiki/Perl_Programming/Unicode_UTF-8
For more on Perl Unicode you can also go through perlunitut.
regards
Pradeep
Copyright © 2007-2013 Pradeep K. Pant All Rights Reserved.