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
Perl compilation on Windows with INST_ARCH set fails
1 direct reply — Read more / Contribute
by ivpri
on Jan 24, 2020 at 14:20
    Hello! I am trying to compile perl on Windows to have a single distribution archive for both 32 and 64 bit. So, in the GNUmakefile this is exactly what I need, I have uncommented it:
    # # Comment this out if you DON'T want your perl installation to have # architecture specific components. This means that architecture- # specific files will be installed along with the architecture-neutral # files. Leaving it enabled is safer and more flexible, in case you # want to build multiple flavors of perl and install them together in # the same location. Commenting it out gives you a simpler # installation that is easier to understand for beginners. # INST_ARCH := \$(ARCHNAME)
    Well, seems easy, but compilation fails strangly:
    Z:\perl\perl-5.30.1\win32>gmake -j2 INST_TOP=C:\perl CCHOME="c:\Progra +m Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64" # CCTYPE=GCC # GCCBIN=gcc # GCCVER=8.1.0 # GCCTARGET=x86_64-w64-mingw32 # GCCCROSS= # WIN64=define # ARCHITECTURE=x64 # ARCHNAME=MSWin32-x64-multi-thread # MAKE=gmake if not exist "mini" mkdir "mini" g++ -I.\include -I. -I.. -DWIN32 -DWIN64 -DCONSERVATIVE -DPERLDLL -DP +ERL_CORE -s -O2 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPE +RL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfie +lds -o..\generate_uudmap.exe ..\generate_uudmap.c \ -s -L"C:\perl\lib\\CORE" -L"c:\Program Files\mingw-w64\x86_64-8.1.0-p +osix-seh-rt_v6-rev0\mingw64\lib" -lmoldname -lkernel32 -luser32 -lgd +i32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -ln +etapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 - +lcomctl32 copy config_H.gc config.h 1 file(s) copied. ... DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\globals.o ..\globals.c g++ -mconsole -o ..\miniperl.exe -s -L"C:\perl\lib\\CORE" -L"c:\Progr +am Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib" min +i\toke.o mini\regcomp.o mini\regexec.o mini\op.o mini\sv.o mini\pp.o +mini\pp_ctl.o mini\pp_sys.o mini\pp_pack.o mini\pp_hot.o mini\gv.o mi +ni\perl.o mini\utf8.o mini\dump.o mini\hv.o mini\av.o mini\caretx.o m +ini\deb.o mini\doio.o mini\doop.o mini\dquote.o mini\globals.o mini\m +ro_core.o mini\locale.o mini\keywords.o mini\mathoms.o mini\mg.o mini +\numeric.o mini\pad.o mini\perlapi.o mini\perly.o mini\pp_sort.o mini +\reentr.o mini\run.o mini\scope.o mini\taint.o mini\time64.o mini\uni +versal.o mini\util.o mini\miniperlmain.o mini\perlio.o mini\win32.o m +ini\win32sck.o mini\win32thread.o mini\fcrypt.o mini\win32io.o -lmol +dname -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -l +shell32 -lole32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm - +lversion -lodbc32 -lodbccp32 -lcomctl32 ..\miniperl.exe -I..\lib -f ..\write_buildcustomize.pl .. ..\miniperl.exe -I..\lib config_sh.PL "INST_TOP=C:\perl" "INST_VER=" " +INST_ARCH=\" "archname=MSWin32-x64-multi-thread" "cc=gcc" "ld=g++" "c +cflags= -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPT +S -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -f +no-strict-aliasing -mms-bitfields" "usecplusplus=" "cf_email=" "d_mym +alloc=undef" "libs= -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool + -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 -luuid + -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32" "in +cpath=c:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mi +ngw64\include" "libperl=libperl530.a" "libpth=c:\Program Files\mingw- +w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib;" "libc=" "make=gma +ke" "_o=.o" "obj_ext=.o" "_a=.a" "lib_ext=.a" "static_ext=Win32CORE" +"usethreads=define" "useithreads=define" "usemultiplicity=define" "us +eperlio=define" "use64bitint=define" "uselongdouble=undef" "uselargef +iles=define" "usesitecustomize=undef" "default_inc_excludes_dot=defin +e" "LINK_FLAGS=-s -L\"C:\perl\lib\\CORE\" -L\"c:\Program Files\mingw- +w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\"" "optimize=-s -O2 +" "ARCHPREFIX=" "WIN64=define" config.gc > ..\config.sh ..\miniperl.exe -I..\lib ..\make_patchnum.pl Updating 'git_version.h' and 'lib/Config_git.pl' Use of uninitialized value $opt{"static_ext"} in split at config_sh.PL + line 51. Use of uninitialized value $opt{"d_mymalloc"} in string eq at config_s +h.PL line 107. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 113. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 116. Use of uninitialized value $opt{"uselargefiles"} in string eq at confi +g_sh.PL line 121. Use of uninitialized value $opt{"WIN64"} in string eq at config_sh.PL +line 131. Use of uninitialized value $opt{"use64bitint"} in string eq at config_ +sh.PL line 151. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 196. Use of uninitialized value $opt{"WIN64"} in string eq at config_sh.PL +line 197. Use of uninitialized value $opt{"uselongdouble"} in string eq at confi +g_sh.PL line 210. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 239. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 263. Use of uninitialized value $opt{"cc"} in pattern match (m//) at config +_sh.PL line 284. Use of uninitialized value $opt{"useithreads"} in string eq at config_ +sh.PL line 304. Use of uninitialized value $opt{"usecplusplus"} in string eq at config +_sh.PL line 308. Can't open -s: No such file or directory at config_sh.PL line 315. Can't open -O2: No such file or directory at config_sh.PL line 315. Can't open -DWIN32: No such file or directory at config_sh.PL line 315 +. Can't open -DWIN64: No such file or directory at config_sh.PL line 315 +. Can't open -DCONSERVATIVE: No such file or directory at config_sh.PL l +ine 315. Can't open -DPERL_TEXTMODE_SCRIPTS: No such file or directory at confi +g_sh.PL line 315. Can't open -DPERL_IMPLICIT_CONTEXT: No such file or directory at confi +g_sh.PL line 315. Can't open -DPERL_IMPLICIT_SYS: No such file or directory at config_sh +.PL line 315. Can't open -DUSE_PERLIO: No such file or directory at config_sh.PL lin +e 315. Can't open -fwrapv: No such file or directory at config_sh.PL line 315 +. Can't open -fno-strict-aliasing: No such file or directory at config_s +h.PL line 315. Can't open -mms-bitfields usecplusplus= cf_email= d_mymalloc=undef lib +s=: No such file or directory at config_sh.PL line 315. Can't open -lmoldname: No such file or directory at config_sh.PL line +315. Can't open -lkernel32: No such file or directory at config_sh.PL line +315. Can't open -luser32: No such file or directory at config_sh.PL line 31 +5. Can't open -lgdi32: No such file or directory at config_sh.PL line 315 +. Can't open -lwinspool: No such file or directory at config_sh.PL line +315. Can't open -lcomdlg32: No such file or directory at config_sh.PL line +315. Can't open -ladvapi32: No such file or directory at config_sh.PL line +315. Can't open -lshell32: No such file or directory at config_sh.PL line 3 +15. Can't open -lole32: No such file or directory at config_sh.PL line 315 +. Can't open -loleaut32: No such file or directory at config_sh.PL line +315. Can't open -lnetapi32: No such file or directory at config_sh.PL line +315. Can't open -luuid: No such file or directory at config_sh.PL line 315. Can't open -lws2_32: No such file or directory at config_sh.PL line 31 +5. Can't open -lmpr: No such file or directory at config_sh.PL line 315. Can't open -lwinmm: No such file or directory at config_sh.PL line 315 +. Can't open -lversion: No such file or directory at config_sh.PL line 3 +15. Can't open -lodbc32: No such file or directory at config_sh.PL line 31 +5. Can't open -lodbccp32: No such file or directory at config_sh.PL line +315. Can't open -lcomctl32 incpath=c:\Program: No such file or directory at + config_sh.PL line 315. Can't open Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\i +nclude libperl=libperl530.a libpth=c:\Program: No such file or direct +ory at config_sh.PL line 315. Can't open Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\l +ib; libc= make=gmake _o=.o obj_ext=.o _a=.a lib_ext=.a static_ext=Win +32CORE usethreads=define useithreads=define usemultiplicity=define us +eperlio=define use64bitint=define uselongdouble=undef uselargefiles=d +efine usesitecustomize=undef default_inc_excludes_dot=define LINK_FLA +GS=-s: No such file or directory at config_sh.PL line 315. Can't open -L"C:\perl\lib\\CORE": Invalid argument at config_sh.PL lin +e 315. Can't open -L"c:\Program: No such file or directory at config_sh.PL li +ne 315. Can't open Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\l +ib" optimize=-s: Invalid argument at config_sh.PL line 315. Can't open -O2 ARCHPREFIX= WIN64=define config.gc : No such file or di +rectory at config_sh.PL line 315. ..\miniperl.exe -I..\lib ..\configpm --chdir=.. Use of uninitialized value $t in string eq at ..\configpm line 345. Use of uninitialized value $s in numeric eq (==) at ..\configpm line 3 +45. Use of uninitialized value $s in numeric eq (==) at ..\configpm line 3 +48. Use of uninitialized value $s in numeric eq (==) at ..\configpm line 3 +48. Use of uninitialized value $s in concatenation (.) or string at ..\con +figpm line 358. Use of uninitialized value in pattern match (m//) at ..\configpm line +428. Use of uninitialized value $osname in string eq at ..\configpm line 46 +1. Use of uninitialized value $osname in string eq at ..\configpm line 46 +2. Use of uninitialized value $osname in sprintf at ..\configpm line 465. Use of uninitialized value $osname in sprintf at ..\configpm line 465. Use of uninitialized value $osname in sprintf at ..\configpm line 465. written lib/Config.pod updated lib/Config.pm updated lib/Config_heavy.pl syntax error at lib/Config_heavy.pl line 166, near "x;" Compilation failed in require at ..\configpm line 1146. gmake: *** [GNUmakefile:1314: ..\lib\Config.pm] Error 255
    Of course, I have tried to comment it back, gmake clean, then compile like above, everything works then. Also, I have tried to set INST_ARCH to something different from $(ARCHNAME). Everything compiled and installed successfully but after that the @INC is empty:
    gmake clean gmake -j2 INST_TOP=C:\perl CCHOME="c:\Program Files\mingw-w64\x86_64-8 +.1.0-posix-seh-rt_v6-rev0\mingw64" INST_ARCH=\x64 gmake install c:\perl\bin\x64\perl -V Can't locate Config.pm in @INC (you may need to install the Config mod +ule) (@INC contains:). BEGIN failed--compilation aborted.
    Any idea how to have it working with INST_ARCH set?
Cheapest way for multiple external commands
1 direct reply — Read more / Contribute
by pedrete
on Jan 24, 2020 at 14:10

    Hi Monks...

    i need to run many externals commands from my Perl script and capture both return-code and STDOUT. These commands must run under a shell...

    To my knowledge, Perl always does a fork and then waits for the child to run the command, am i right?

    Is there any way to prevent that "fork"? i am looking for the "cheapest way" in terms of CPU and Memory load...

    THX!!!

    Pedreter.
New File Not Working
4 direct replies — Read more / Contribute
by jalopez453
on Jan 24, 2020 at 12:30

    I have script to where I am looking to update a date format, but for some reason my new file is not being created and I cannot see what I am missing or what is wrong. If someone could point out what I have wrong it would be truly appreciated.

    use strict; open(INFILE, "PSR_Date.txt"); open(OUTFILE, ">PSR_OutputDate.txt"); while (<INFILE>) { $line = $_; $line =~ s/(\d{4})-(\d{2})-(\d{2})\s\d{2}:\d{2}:\d{2}/ +\2\/\3\/\1/g; print OUTFILE "$line"; } close INFILE; print "Done!\n"; chomp($pause = <STDIN>); _DATA_ OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,2015- +06-20 00:00:00 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,2015- +06-20 00:00:00 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,2015- +06-20 00:00:00 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,2015- +06-20 00:00:00 _OUTPUT_ OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,06/20 +/2015 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,06/20 +/2015 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,06/20 +/2015 OD44202,07/01/2015,08/19/2019,08/27/2019,1,07/01/2015,06/30/2019,06/20 +/2015
Link Tcl to a different tcl.dll on Windows
1 direct reply — Read more / Contribute
by Takamoto
on Jan 24, 2020 at 11:24

    I've been fighting for the last two days trying to link the (already installed) Tcl.pm module to another Tcl.dll . This is my machine:

    • Windows 10, 64 bit
    • Tcl/Tk 8.6.10 downloaded from https://bitbucket.org/tombert/tcltk/downloads/ (tcltk86-8.6.10-0.tcl86.Win10.x86_64.tgz), unpacked and put in C:/
    • Perl: This is perl 5, version 28, subversion 1 (v5.28.1) built for MSWin32-x64-multi-thread
    • Tcl.pm: 1.27 (Tcl.pm has been installed in the past using defaults settings, probably ActiveTcl was installed on the machine and was in PATH)

    Now, I have no Tcl/Tk in Path (and I do not want to have it), no other Tcl/Tk installation is on my machine, but the above in C:/. I want Tcl.pm to link to this installation. I do not want to modify permanently my Path. After reading posts everywhere, I was sure the following should work:

    use strict; use warnings; BEGIN { print "Starting script on MSWIN\n"; my $pathTCL = "C:/Tcl/bin/tcl86.dll"; print "TCL: " . $pathTCL . "\n"; $ENV{'PERL_TCL_DL_PATH'} = $pathTCL;# showld be the same of: PERL_ +TCL_DLL } use Tcl;

    Unfortunately, I get the following, which for me is quite remarkable...

    Starting script on MSWIN TCL: C:/Tcl/bin/tcl86.dll NpLoadLibrary: could not find Tcl library at 'C:/Tcl/bin/tcl86.dll' at + C:/Strawberry/perl/lib/XSLoader.pm line 111. Failed to load Tcl dll! at C:/Strawberry/perl/lib/XSLoader.pm line 111 +. Unable to initialize Tcl at C:/Strawberry/perl/lib/XSLoader.pm line 11 +1. Compilation failed in require at .\wheel.pl line 11. BEGIN failed--compilation aborted at .\wheel.pl line 11.
Caching files
1 direct reply — Read more / Contribute
by Anonymous Monk
on Jan 24, 2020 at 08:45
    Hi,
    I have list of coordinates and a subroutine that tells me in which JSON file among many I must retreve some content for each coordinate pair.
    The values in the JSON files change periodically.
    Could you please provide me some indications on how to implement a caching of the JSON information in a hash (I saw there is File::Cache) and monitor the changes to the JSON files so that the hash is updated?
    Thank you!
Catalyst with DBIx::Class User Roles Error
No replies — Read more | Post response
by Boydle
on Jan 23, 2020 at 23:16

    Hi, I hope someone can help me with a problem I am having with the user and roles structure as defined in the catalyst tutorial. I am working on a new project using Catalyst, DBIx::Class and HTML::FormFu I am fairly new to these 3 modules.

    I have used the tables and I am now trying to use a FormFu form to allow me to create a new user and assign roles to them. I am getting the following error: Caught exception in Indium::Controller::Admin::User->create "The primary key and the foreign key may not be the same column in class Indium::Schema::Result::UserRole at .....

    I have tried adding a new id column to user_role and making it the primary key however this breaks the inbuilt $c->check_any_user_role('myrolename'); this does not error but returns false instead of true as expected and what was occurring before adding the id field as primary. Removing the primary also does not work.

    FormFu roles select:
    - type: Select label: Role multiple: 1 name: user_roles model_config: resultset: Role label_column: role id_column: id

    The user creation itself is working if I remove the roles from the form.

    This is the user role_model

    __PACKAGE__->table("user_role"); __PACKAGE__->add_columns( "user_id", { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, "role_id", { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, ); __PACKAGE__->set_primary_key("user_id", "role_id"); __PACKAGE__->belongs_to( "role", "Indium::Schema::Result::Role", { id => "role_id" }, { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" + }, ); __PACKAGE__->belongs_to( "user", "Indium::Schema::Result::User", { id => "user_id" }, { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" + }, ); __PACKAGE__->meta->make_immutable; 1;
Installing a missing module - Perl 5.8.3
3 direct replies — Read more / Contribute
by amitvalia
on Jan 23, 2020 at 20:41
    I'm a beginner at installing Perl. We moved to a new server over the weekend. I've decided to stick to 32 bit version of Perl since 64 bit was giving me issues with ASP scripts. The only 32 bit my IT Admin had was 5.8.6. That's what I had him install. My OS is Windows Server 2019

    Everything works okay except one script that has use Time::Piece. It gives me an error

    Can't locate Time/Piece.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at format_schwabfile_manual.pl line 7 So I try to install it via ppm

    C:\>ppm install time::Piece Error: No valid repositories: Error: 404 Not Found Error: 404 Not Found
    Tried  cpan> install Time::Piece But that didn't work either. It was not able to connect to any of my URLS. So I manually download Time-Piece-1.33.tar.gz from CPAN. Now that I have the tar file, how do I manually install it?
Getting JSON data from a URL using LWP
1 direct reply — Read more / Contribute
by nachtmsk
on Jan 23, 2020 at 16:03
    Hi, I need to get JSON data from a URL. This is the URL, minus the actual Auth code at the end.

    https://api.bridgedataoutput.com/api/v2/OData/test/TestData?access_token=xxxxxxxxxxxxxxxxxxxxxx

    If I type this URL into my browser it brings back the data I need. However, if I use it in the code below I get the 'die' message I have set below. My main task right now is to just get the data from the URL into a perl variable. Later on I can worry about parsing the JSON. I have used LWP before to get data this way, usually XML. I can't figure out why this isn't working.

    Any help would be appreciated.

    ---------------------------
    use strict; use warnings 'all'; use LWP::Simple 'get'; use JSON::Parse 'parse_json'; use constant URL => 'https://api.bridgedataoutput.com/api/v2/OData/tes +t/TestData?access_token=xxxxxxxxxxxxxxxxxxxxxx'; my $json = get URL or die "Unable to get JSON data"; my $data = parse_json($json); print $data;
    Thanks! Mike
Tk design user interface
2 direct replies — Read more / Contribute
by Anonymous Monk
on Jan 23, 2020 at 07:10

    Hi, I am writing a script that searches for a file and reports about it, but i am having problems designing the user interface. I am using Tk and the pack function for this. Here is the code i have so far:

    use strict; use warnings; use Tk; my $mw = new MainWindow; $mw->geometry("400x400"); my $text = $mw->Text(-width=>15,-height=>3)->pack(-side=>'bottom',-anc +hor=>'w',-padx=>20,-pady=>10); my $label = $mw->Label(-text=>"File?",-anchor=>'w')->pack(-side=>'left +',-anchor=>'n',-padx=>20,-pady,10); my $entry = $mw->Entry->pack(-side=>'left',-anchor=>'n',-padx=>20,-pad +y=>10); my $button = $mw->Button(-text => "search!",-width=>30)->pack(-side => + 'left',-anchor=>'n',-padx=>20,-pady=>10); MainLoop;

    As you can see the textarea is located all the way to the bottom while i want it just below the other widgets. So all i need is to loose some vertical space but i am unable to do this. Sorry for my poor engish, please advice.

cpanm --installdeps . cannot install Template::Toolkit
4 direct replies — Read more / Contribute
by Skeeve
on Jan 23, 2020 at 03:29

    When building my Docker image I need to install Template::Toolkit using cpanm.

    In my cpanfile I've defined

    requires "Template::Toolkit","3.006";
    which clearly is the version I can find on cpan.org.

    But the build fails with

    ==> Found dependencies: Template::Toolkit ! Installing the dependencies failed: Module 'Template::Toolkit' is no +t installed ! Bailing out the installation for .. Found Template::Toolkit which doesn't satisfy 3.006.
    It only seems to be possible to be installed when defining the minimal version to be "0".

    What can I do about it? Can I do something about it?


    s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
    +.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e

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!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • 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
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            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.