Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Seekers of Perl Wisdom

( #479=superdoc: print w/ replies, xml ) Need Help??

If you have a question on how to do something in Perl, or you need a Perl solution to an actual real-life problem, or you're unsure why something you've tried just isn't working... then this section is the place to ask. Post a new question!

However, you might consider asking in the chatterbox first (if you're a registered user). The response time tends to be quicker, and if it turns out that the problem/solutions are too much for the cb to handle, the kind monks will be sure to direct you here.

User Questions
Alignment and matrix generation
No replies — Read more | Post response
by newtoperlprog
on Mar 27, 2015 at 14:49

    Dear PerlMonks,

    I am working on an alignment file. I am trying to print the number of occurrence of individual bases (a, c, g, t) at each position. I seek some help to print it for the multiple alignment lines.

    Test file (test.dat) has single alignment column and data file has 2 alignment column.

    Output from test.dat is given below.

    Test.dat file

    CLUSTAL O(1.2.1) multiple sequence alignment gnl|hbvcds|AB014370_PreC_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB064314_PreC_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB014384_C_P-C ----------------------------------- +------------------------- gnl|hbvcds|AB014385_C_P-C ----------------------------------- +------------------------- gnl|hbvcds|AB048701_PreS1_P-D atggggcagaatctttccaccagcaatcctctggg +attctttcccgaccatcagttggat gnl|hbvcds|AB078031_PreS1_P-D atggggcagaatctttccaccagcaaccctctggg +attctttcccgaccaccagttggat gnl|hbvcds|AB030513_S_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB064314_S_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB194947_PreS2_P-E ----------------------------------- +------------------------- gnl|hbvcds|AB194948_PreS2_P-E ----------------------------------- +-------------------------
    #!/usr/bin/perl use strict; use warnings; my ($rna,$rnalen,$posi, $pos, $base, $dibase,$percent); my (%bases, %occur, %count); my($max_position, $sum, $tot) = 0; my @dinucleotide = qw(A C G T);#change the number of bases my $file = $ARGV[0] or die "Please provide the input file\n"; my $column = $ARGV[1]; open (X, $file) || die "Check the input $file\n"; while (<X>) { # chomp $_; if ($_=~/^#/) { next; } if ($_=~/^\s+/) { next; } if ($_=~/^CLUSTAL/) { next; } if ($_=~/\*/) { next; } my @temp = split (/\s+/, $_); $rna = $temp[$column]; $rna = uc $rna; $rnalen = length($rna); my @nucleotides = split (//,$rna); $tot++; foreach my $key(@dinucleotide) { $bases{$key}=1; $sum++; } $max_position = $rnalen if($rnalen > $max_position); for (my $position=0;$position<=$rnalen-1;$position++) { $dibase = substr($rna, $position, 1); #change the splitting number foreach my $dinucleotide(@dinucleotide) { if ($dibase eq $dinucleotide){ $posi = $position+1; $occur{$posi,$dibase}++; # print "$posi\t$dibase\n"; } } } } for($pos=1;$pos<=$max_position;$pos++) { print "$pos\t"; foreach $base(sort keys %bases) { print "$base\t"; if(exists $occur{$pos,$base}) { my $percent = sprintf ("%0.1f", (($occur{$pos,$base})/$tot)*10 +0); # print "$occur{$pos,$base}\t"; print "$percent\t"; } else { print "0\t"; } } print "\n"; } close (X);

    Result from test.dat

    1 A 20.0 C 0 G 0 T 0 2 A 0 C 0 G 0 T 20.0 3 A 0 C 0 G 20.0 T 0 4 A 0 C 0 G 20.0 T 0 5 A 0 C 0 G 20.0 T 0 6 A 0 C 0 G 20.0 T 0 7 A 0 C 20.0 G 0 T 0 8 A 20.0 C 0 G 0 T 0 9 A 0 C 0 G 20.0 T 0 10 A 20.0 C 0 G 0 T 0 11 A 20.0 C 0 G 0 T 0 12 A 0 C 0 G 0 T 20.0 13 A 0 C 20.0 G 0 T 0 14 A 0 C 0 G 0 T 20.0 15 A 0 C 0 G 0 T 20.0 16 A 0 C 0 G 0 T 20.0 17 A 0 C 20.0 G 0 T 0 18 A 0 C 20.0 G 0 T 0 19 A 20.0 C 0 G 0 T 0 20 A 0 C 20.0 G 0 T 0 21 A 0 C 20.0 G 0 T 0 22 A 20.0 C 0 G 0 T 0 23 A 0 C 0 G 20.0 T 0 24 A 0 C 20.0 G 0 T 0 25 A 20.0 C 0 G 0 T 0 26 A 20.0 C 0 G 0 T 0 27 A 0 C 10.0 G 0 T 10.0 28 A 0 C 20.0 G 0 T 0 29 A 0 C 20.0 G 0 T 0 30 A 0 C 0 G 0 T 20.0 31 A 0 C 20.0 G 0 T 0 32 A 0 C 0 G 0 T 20.0 33 A 0 C 0 G 20.0 T 0 34 A 0 C 0 G 20.0 T 0 35 A 0 C 0 G 20.0 T 0 36 A 20.0 C 0 G 0 T 0 37 A 0 C 0 G 0 T 20.0 38 A 0 C 0 G 0 T 20.0 39 A 0 C 20.0 G 0 T 0 40 A 0 C 0 G 0 T 20.0 41 A 0 C 0 G 0 T 20.0 42 A 0 C 0 G 0 T 20.0 43 A 0 C 20.0 G 0 T 0 44 A 0 C 20.0 G 0 T 0 45 A 0 C 20.0 G 0 T 0 46 A 0 C 0 G 20.0 T 0 47 A 20.0 C 0 G 0 T 0 48 A 0 C 20.0 G 0 T 0 49 A 0 C 20.0 G 0 T 0 50 A 20.0 C 0 G 0 T 0 51 A 0 C 10.0 G 0 T 10.0 52 A 0 C 20.0 G 0 T 0 53 A 20.0 C 0 G 0 T 0 54 A 0 C 0 G 20.0 T 0 55 A 0 C 0 G 0 T 20.0 56 A 0 C 0 G 0 T 20.0 57 A 0 C 0 G 20.0 T 0 58 A 0 C 0 G 20.0 T 0 59 A 20.0 C 0 G 0 T 0 60 A 0 C 0 G 0 T 20.0

    Data file

    CLUSTAL O(1.2.1) multiple sequence alignment 1 + 60 gnl|hbvcds|AB014370_PreC_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB064314_PreC_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB014384_C_P-C ----------------------------------- +------------------------- gnl|hbvcds|AB014385_C_P-C ----------------------------------- +------------------------- gnl|hbvcds|AB048701_PreS1_P-D atggggcagaatctttccaccagcaatcctctggg +attctttcccgaccatcagttggat gnl|hbvcds|AB078031_PreS1_P-D atggggcagaatctttccaccagcaaccctctggg +attctttcccgaccaccagttggat gnl|hbvcds|AB030513_S_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB064314_S_P-A ----------------------------------- +------------------------- gnl|hbvcds|AB194947_PreS2_P-E ----------------------------------- +------------------------- gnl|hbvcds|AB194948_PreS2_P-E ----------------------------------- +------------------------- 61 + 120 gnl|hbvcds|AB014370_PreC_P-A tagagtctcctgagcattgctcacctcaccatact +gcactcaggcaagccattctctgct gnl|hbvcds|AB064314_PreC_P-A tagagtctcctgagcattgctcacctcaccatacg +gcactcaggcaagccattctctgct gnl|hbvcds|AB014384_C_P-C tagagtctccggaacattgttcacctcaccataca +gcactcaggcaagctattctgtgtt gnl|hbvcds|AB014385_C_P-C tagagtctccggaacattgttcacctcaccataca +gcactcaggcaagctattctgtgtt gnl|hbvcds|AB048701_PreS1_P-D gggtttttcttgttgacaagaatcctcacaatacc +gcagagtctagactcgtggtggact gnl|hbvcds|AB078031_PreS1_P-D gggtttttcttgttgacaagaatcctcacaatacc +gcagagtctagactcgtggtggact gnl|hbvcds|AB030513_S_P-A gggtttttcttgttgacaagaatcctcacaatacc +gcagagtctagactcgtggtggact gnl|hbvcds|AB064314_S_P-A gggtttttcttgttgacaagaatcctcacaatacc +gcagagtctagactcgtggtggact gnl|hbvcds|AB194947_PreS2_P-E gggtttttcttgttgacaaaaatcctcacaatacc +gcagagtctagactcgtggtggact gnl|hbvcds|AB194948_PreS2_P-E gggtttttcttgttgacaaaaatcctcacaatacc +gcagagtctagactcgtggtggact * * ** * * ****** **** +*** * * * *

    I am trying to get an result with all the position and occurrence of nucleotides similar to the test.dat result. Any help is greatly acknowledged

    Regards

[OT (though it might involve some Perl programming)] One for the weekend. (Updated: significant typo!)
No replies — Read more | Post response
by BrowserUk
on Mar 27, 2015 at 14:38

    Whilst waiting for my tea to brew, and thinking about my latest programming problem, I found myself 'walking the diagonals' on my tiled kitchen floor.

    Walking the diagonals means starting in one corner of the rectangle and walking away at 45 degrees:

    +---+---+--- | \ | | +---+---+--- | | \ | +---+---+--- | | | \

    And when you hit the opposite edge, 'reflect' back in the other direction:

    | \ | | | / | ---+---+---+---+---+ | | \ | / | | +---+---+---+---+---

    Ditto at the ends:

    | | / | +---+---+--- | / | | / +---+---+---+ | \ | / | +---+---+---+

    The walk ends when you arrive directly into a corner. See the first diagram, but going the other way.

    What I noticed was that starting in one corner, and continuing until I encountered another corner, I found myself in the diagonally opposite corner. When I drew a diagram on a post-it, I discovered that I had walked on every tile exactly once.

    This was interesting, because I've been doing this 'walking the diagonals' when deep in thought -- a mindless repetitious activity that frees the mind for deeper things -- and recalled that in my old house kitchen, where the rectangle was the same width, but 2 tiles shorter, the tour also ended up in the opposite diagonal; also covered every tile exactly once and was 14 10 steps smaller.

    How big is the rectangle in my current kitchen?

    (Solution on Monday,)


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority". I'm with torvalds on this
    In the absence of evidence, opinion is indistinguishable from prejudice. Agile (and TDD) debunked
    div class=
Permission denied when opening files in Windows
3 direct replies — Read more / Contribute
by jsnicaise
on Mar 27, 2015 at 14:14
    Hello monks, I have a simple script that ends up in a Permission Denied error somewhere in the loop, when trying to open files for writing. I've searched around for answers, but nothing seems conclusive enough. There are no anti-virus installed on my machine, no backup software that could lock files, etc. I've tried active perl and strawberry perl. The code:
    foreach my $lineData (@inputData) { @lineValue = split(',', $lineData); print $lineValue[0]; print $lineValue[1]; $output = $lineValue[0].".cfg"; $conf = "define hostgroup{\n\thostgroup_name\t\t" . $lineValue +[0] . "\n\talias\t\t" . $lineValue[1] . "\n}\n"; open(my $fh2, ">", $output); print $fh2 $conf; close $fh2 or warn $! ? "Error closing sort pipe: $!" : "Exit +status $? from sort"; }
    Any thoughts? Thanks!
(Solved) Exporter not behaving as expected
2 direct replies — Read more / Contribute
by davies
on Mar 27, 2015 at 13:50

    I'm trying to set up some constants in a module that will be accessible from other code. The final things will be capitalised and I may experiment with other modules to lock them, but for the moment I'm trying the examples from Simple Module Tutorial, but modified for my needs. And I'm getting frustrated. I have two files:

    MyModule.pm

    package MyModule; use strict; # Case A use Exporter; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = 1.00; @ISA = qw(Exporter); @EXPORT = (); #@EXPORT_OK = qw(func1 func2); @EXPORT_OK = qw(@rray); # %EXPORT_TAGS = ( DEFAULT => [qw(&func1)], # Both => [qw(&func1 &func2)]); # sub func1 { return reverse @_ } # sub func2 { return map{ uc }@_ } # Case B # use Exporter qw(import); # our $VERSION = 1.00; # our @ISA = qw(Exporter); # our @EXPORT_OK = qw(@rray); # All cases my @rray = (1, 2, 3, 4); 1;

    MyScript.pl

    use strict; # case 1 # use MyModule; # print scalar(@rray); # case 2 # use MyModule; # print scalar(@MyModule::rray); # case 3 use MyModule qw(@rray); print scalar(@rray);

    Case 1 returns Global symbol "@rray" requires explicit package name as one would expect. Cases 2 and 3 both print 0. Case A or B makes no difference.

    Where have I blundered, please?

    TIA & regards,

    John Davies

Logic Issues with conditionals
5 direct replies — Read more / Contribute
by jmneedhamco
on Mar 27, 2015 at 10:05

    Greetings:

    I am working on a script that updates some files for user access on a propritory system. Basically, I need to update 12 files based on some very weird logic.

    The English version is as follows: for fileset 1, append file with user string. for fileset 2, append file with user string. these are always done together if developer access. for fileset 3, append file with user string, only if production access. Fileset four is appended with user string, and is different from filesets 1 - 3. if filesets 1 - 3 are appended, push script must be run, if fileset 4 no push.

    above is highly simplified from the real situation but the 'user strings' mentioned differ. There are four databases that are used, I will call them db1, db2, db3 and db4 for my code. So the jist of what I tried is a nested loop. I am having trouble with the second part of the developer access. Basically, it needs to run an outer loop for all three instances. But if Production is not needed, the loop should terminate. This is done inside another "master loop" that does this foreach user in an input file. I also set a flag variable to try to make this work.

    Code I tried (not complete script):
    if($access eq 'prod' || $access eq 'dev') { if($access eq 'dev') { $flag = "dev"; } for(my $i = 0; $i < 3;$i++) { if($flag eq 'dev') { @files = ('file1', 'file2', 'file3', 'file4'); } elsif($i == 2) { $flag = "reporting"; @files = ('file1', 'file2', 'file3', 'file4'); } if($access eq 'prod') { $flag = "prod"; @files = ('file1', 'file2', 'file3', 'file4'); } else { break; } for (my $j = 0; $j < 4; $j++) { my $file = $files[$j]; my $db = $dbs[$j]; print("j variable is: $j\n"); $acString = &build_string($user, $db, $flag); &WriteFile($file, $acString); } } }

    The build string sub puts the string to append to the file together (first run through inner loop is db1). Then it calls the writefile sub and appends the string to the file that is passed in from the fileset (@files).

    Again, this is done for however many users are read in from an input file which is ARGV[0].

    Hope someone can help me sort this out. Thanks in advance for the help all!

Convert Hash To Array in Perl Catalyst
2 direct replies — Read more / Contribute
by jphani225
on Mar 27, 2015 at 10:04
    Hi I am working with perl catalyst I am new to this. Now I am facing a problem regarding variables. Here I am getting input as hash. Now I need to send this hash variable to another subroutine. Please help me how could I send. I writing the code below how I am using:
    if ($csData->{'CUSTOMER_INVOICE_DETAILS'}) { $c->log->debug("API Response:". Dumper $csData->{'CUSTOMER_INVOICE_DET +AILS'}); my $Charges = []; my @customerCharges = $csData->{'CUSTOMER_INVOICE_DETAILS'}; foreach(@customerCharges) { my ($customername,$customeramount) = split /:/; my $charge_hash = ({ customername => $customername, customeramount => $customeramount }); push(@$Charges, $charge_hash); } my @ReturnCharges = $self->API->get_customer_charges($Charges, $Custom +er->customerid, $params->{'invoiceid'});
    The other subroutine where this data is receiving is as following:
    sub get_customer_charges { my $self = shift; my ($charge, $CustomerId, $INID) = @_; my $http_request = { action => 'GetTariff', customerid => $CustomerId, csid => $INID, }; my $markups = $self->APIRequest($http_request); ##&#8234;#&#8206;Charge&#8236; Level ID Inserting As 10 my @ChargeLevels; my @BaseLevelID; foreach my $ch (@$charge) { my ($customername,$customeramount) = split(':', $ch->{'customername'}, + $ch->{'customername'}); my $chargelevel = join(':', $ch->{'customername'}, $ch->{'customeramou +nt'}, '10'); push(@BaseLevelID, $chargelevel); } push(@ChargeLevels, @BaseLevelID); return @ChargeLevels; }
    Where I am printing server log for CUSTOMER_INVOICE_DETAILS variable I am getting the following values:
    API Response:$VAR1 = { 'Product' => '34.04', 'basetax' => '2.38', 'vattax' => '4.36' };
    After sending data to second subroutine the data coming in server log for second subroutine variable is as following: Charges in API:$VAR1 = 'HASH(0xb75d6d8)::10'; Can anyone help how could I send the hash data from one subroutine to another? Thanks in advance.
Trigger refresh after changing wallpaper when called from scheduled task
2 direct replies — Read more / Contribute
by ice94
on Mar 27, 2015 at 09:26
    Hello to you, enlightened monks. First of all, the technical environment :
    • OS: Windows 7 x64
    • Perl: Strawberry Perl x86 v5.16.3001
    • Modules: Win32::API and Win32::TieRegistry
    • Display: 2 x 1920x1080 monitors
    Consider the following snippet :
    use strict; use warnings; use Win32::API; use Win32::TieRegistry; sub setWPUsingAPI { my($pic) = @_; my $SPI_SETDESKWALLPAPER = 20; my $SPIF_UPDATEANDSENDINI = 3; my $syspinf = Win32::API->new('user32','SystemParametersInfo', 'II +PI', 'I') or die "Could not import function SystemParametersInfo.\n"; $syspinf->Call($SPI_SETDESKWALLPAPER, 0, $pic, $SPIF_UPDATEANDSEND +INI); } sub setWPUsingRegistry { my($pic) = @_; $Registry->Delimiter('/'); $Registry->{"HKEY_CURRENT_USER/Control Panel/Desktop//TileWallpape +r"} = 1; $Registry->{"HKEY_CURRENT_USER/Control Panel/Desktop//WallpaperSty +le"} = 1; $Registry->{"HKEY_CURRENT_USER/Control Panel/Desktop//Wallpaper"} += $pic; } my $wallpaper = $ARGV[0]; setWPUsingAPI($wallpaper); setWPUsingRegistry($wallpaper);
    The previous script (called test.pl) is called through a scheduled task w/ the following options :
    • Account: myaccount
    • Run mode: Run only when user is logged on
    • Program: c:\strawberry\perl\bin\perl.exe
    • Arguments: C:\test.pl C:\picture.jpg
    • Permissions: Run w/ highest privileges

    When running the scheduled task, a taskeng.exe pops up briefly and the wallpaper is displayed correctly w/ the registry keys TileWallpaper, WallpaperStyle and Wallpaper all correctly set.

    But if I change the run mode to Run whether the user is logged on or not to avoid any pop up, the registry keys are correctly set according to the setWPUsingRegistry subroutine but the setWPUsingAPI subroutine is not applied.

    I thought there was an issue w/ the account running the scheduled task in Run whether the user is logged on or not mode (which is AFAIK SYSTEM) but I don't know how to set up the task to circumvent this issue (maybe a runas but then, what would be the point of the Run w/ highest privileges option ?).

    I even wrapped the whole code in a batch file but to no avail.

    Do you wise monks see where the problem could be ? Thanks in advance.

Tring to write script to add and get employee detials to hash
2 direct replies — Read more / Contribute
by yedukondalu
on Mar 27, 2015 at 09:23

    Hi all .I need to add employee details to a hash,i mean i need employe id as key and i need to move all other details to be value storing them in a list. i tried this.

    %database; @employee_details=($employee_name, $employee_salary,$employee_ph,"\n" +); $database{$employee_id}=(@employee_details);
    When i tried this the size of array is stored in the value. I tried passing (\@employee_details) i.e reference of list but i cant access the list.

Help with removing duplicates in array
3 direct replies — Read more / Contribute
by beanscake
on Mar 27, 2015 at 07:53

    Please i need help on this i want to avoid duplicate in an array but have tried endlessly without good result please can someone help me out on this thanks

    use strict; use warnings; #use List::MoreUtils qw(uniq); // i have tried this to handle the dupl +icated emails use Data::Dumper qw(Dumper); my $Directory = $ARGV[0]; #Directory to scan for emails my $Filename =$ARGV[1]; # where to write out found emails note: avoid + forever loop make sure it's not the same directory my $success = "\n [+] $0 is Scanning For E-mails \n\n"; my $tryagain = "\n [?] perl $0 Directory fileto.txt \n\n"; if (@ARGV != 2) { print $tryagain; exit(); } else { print $success; } sub uniq { #and this to handle the duplicated emails return keys %{{ map { $_ => 1 } @_ }}; } #sub uniq { #with this to handle the duplicated emails # my %seen; # grep !$seen{$_}++, @_; #} my $total_filesscanned = 0; my $total_email = 0; my @files = grep ( -f ,<$Directory*.txt*>); #scanning directory open(my $fh, '>>', $Filename); foreach my $file (@files) { $total_filesscanned++; # begin to count numbers of file to be scanned open my $open, '<', $file or die $!; while (<$open>) { chomp; my @findemails = split(' '); my @filtered = uniq(@findemails); # meant to avoid duplicates #my @filtered = join(" ", uniq(@findemails)); also took this +aproach foreach my $emails (@filtered) { if($emails =~ /^\w+\@([\da-zA-Z\-]{1,}\.){1,}[\da-zA-Z-]{2 +,6}$/) { #grab the emails $total_email++; # begin to count emails print $fh "$emails\n"; # write the emails to file } } } close $file; # close files print "$file\n"; } close $fh; # close the file to write #my $removed = @findemails - @filtered; # am expecting it to avoid + duplicate emails but it's not working print "Files Scanned: $total_filesscanned\n"; print "E-mail Found: $total_email\n"; #print "Filtered Total: $removed\n"; print "done\n";
sort file with your own logic
3 direct replies — Read more / Contribute
by citi2015
on Mar 27, 2015 at 04:23

    I want to sort the output from du -sh, from the big size to small size, here is an example

    33G /data/A 37M /data/B 44G /data/C 46G /data/D 68G /data/E 114G /data/F 148G /data/G 169M /data/H

    her is my test code

    my $file_dist="../data/disk_usage.dat.new.bkp"; ##open the usage file open(my $fh ,$file_dist) or die "can not open file"; my @arr = (); my @sorted = (); while(my $line=<$fh>){ chomp $line; push(@arr, $line); } @sorted = sort sort_arr @arr; print Dumper \@sorted; sub sort_arr { my ($size_a, $type_a); if($a =~ /(\d*?\.*\d*)([M|G|K])/){ $size_a = $1; $type_a = $2; } my ($type_b, $size_b); if($b =~ /(\d*?\.*\d*)([M|G|K])/){ $size_b = $1; $type_b = $2; } my $a1 = return_base($type_a) * $size_a; my $b1 = return_base($type_b) * $size_b; $b1 <=> $a1 ; } sub return_base{ my $type = shift; return 1024 if ($type eq "M"); return 1024*1024 if($type eq "G"); return 1 if($type eq "K"); } sub trim{ my $s=shift; $s=~s/\s+$//; $s=~s/^\s+//; return $s; }

    My question is why in sub sort_arr, I don't need to use defination, like my $a, my $b?


Add your question
Title:
Your question:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":


  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others rifling through the Monastery: (16)
    As of 2015-03-27 23:01 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      When putting a smiley right before a closing parenthesis, do you:









      Results (620 votes), past polls