If you've discovered something amazing about Perl that you just need to share with everyone, this is the right place.

This section is also used for non-question discussions about Perl, and for any discussions that are not specifically programming related. For example, if you want to share or discuss opinions on hacker culture, the job market, or Perl 6 development, this is the place. (Note, however, that discussions about the PerlMonks web site belong in PerlMonks Discussion.)

Meditations is sometimes used as a sounding-board — a place to post initial drafts of perl tutorials, code modules, book reviews, articles, quizzes, etc. — so that the author can benefit from the collective insight of the monks before publishing the finished item to its proper place (be it Tutorials, Cool Uses for Perl, Reviews, or whatever). If you do this, it is generally considered appropriate to prefix your node title with "RFC:" (for "request for comments").

User Meditations
Perl's valentine day
No replies — Read more | Post response
by AlexP
on Feb 14, 2022 at 07:40

    Hi monks! Just wanna share my supper mood. My girlfriend gave me this stylish shirt today:

    It is valuable, when close people know your life. And it is unbelievably cool, that we have such language as Perl. And the best community among all programming languages. Even without using Perl in my work (🥲), I get a huge positive impact on my work and programming skills scrolling through the posts on perlmonks.

    I wanna say thanks to all of you, Larry and Perl! ❤️

Calling an overload::Method
3 direct replies — Read more / Contribute
by hv
on Feb 03, 2022 at 13:43

    You probably won't need to know this, but here it is just in case you do. I stumbled across it while trying to add some speedups to Math-GMP, which uncovered a bug in Test-Builder; a cpangrep then found 5 other distributions trying to do the same thing, all of which also had the same bug (as well as a few that simply bundle Test::Builder).

    If you use overload to make your objects behave specially - as Math::GMP does, to make the objects act more like perl's numeric scalars - you provide those behaviours by way of a hash keyed on the (occasionally cryptic) name of the behaviour, providing a coderef or a function name:

    package My::SuperNumber; use overload ( # overload the subtraction operator '-' => sub { my($self, $other, $swap) = @_; my $result = $self->my_super_subtract($other); return $swap ? -$result : $result; }, );

    That $swap is there to handle asymmetric operations like subtraction: if the caller asks for $super - 12 perl will call that coderef with ($super, 12, 0) as parameters, but if they ask for 34 - $super perl will instead pass ($super, 34, 1) to say that the parameters have been swapped.

    Now for simplicity perl always calls these overload functions the same way, even for unary operators:

    use overload ( # this is the cryptic name of the "numification" operator '0+' => sub { my($self, $other, $swap) = @_; return $self->as_number; }, );

    $other and $swap are still passed in when calling this method (as undef and 0), but of course everyone ignores them and writes the function above as if it took only one parameter. And that's all fine until you want to use XS to provide the overloaded method - at the C level you can't just ignore arguments you don't care about, you have to supply a signature that matches how it is called. So you have to write something like this:

    use overload ( # this is the cryptic name of the "stringification" operator '""' => op_stringify, ); # and then in the XS code: char * op_stringify(left, right, swap) SV * left SV * right bool swap CODE: RETVAL = my_stringify(left); OUTPUT: RETVAL

    .. and that's all fine too - XS writers expect to have to do things in slightly more convoluted ways. However, back in the land of Perl, the overload module also provides a Method function which allows you to ask for the coderef that _would_ be called for a particular overloaded operation. You might use that to check if it's safe to use something as a string, for example:

    sub as_string { my($obj) = @_; return "$obj" unless ref $obj; die "Give me a string, or something that pretends to be one" unless overload::Method($obj, '""'); return "$obj"; }

    However you might also use it to invoke that method yourself, and this is the thing that everyone got wrong:

    sub as_string { my($obj) = @_; return "$obj" unless ref $obj; my $method = overload::Method($obj, '""') or die "Give me a string, or something that pretends to be one"; # WRONG return $method->($obj); # RIGHT return $method->($obj, undef, 0); }

    If you invoke the coderef returned by overload::Method without supplying 3 arguments, that may work fine as long as you only interact with objects whose overloads are provided by perl code, but trying to invoke an XS method that way will fall over at runtime with a message like Usage: My::SuperNumber::as_string(left, right, swap) - because they _had_ to write it with that signature to let perl call it. And since use of XS is fairly rare and use of overload is even more so, it may be a long time before you discover there's a bug. So don't do that. :)

Leap years? How does that work?
3 direct replies — Read more / Contribute
by talexb
on Feb 01, 2022 at 21:33

    In my defence, I'm a nerd. Dad's a retired actuary, and I've been fiddling with math and logic puzzles forever. So it made sense that an idea that's been bubbling away in my head decided to wake me this morning. I wanted to write it down immediately, but I had to have breakfast, then I had to head out for my weekly grocery shopping during a pandemic thing, then I had to put in my work day. Then I had supper and a couple of glasses of wine.

    So at this point, I'm ready to jot down a few thoughts on leap years.

    Imagine, if you will, the time and effort it took for people to realize that while 365 days in a year was very close, it was not quite the right value. Then imagine the you are the brave astronomer and local science dude who has to have a polite conversation with, say, The Pope about this, having already braved the underlings and the Pope's secretary. Why the Pope? Because he's the one who is going to say, OK, we're going to change the calendar now., and people are going to listen and obey.

      Astronomer: You Holiness, Thank you for taking time out of your day to see me. I will be brief.

      The Pope: Galileo! So good to see you. Please, call me Jules!

      A: Your Holiness, please.

      TP: OK, OK, I kid. So, they tell me you want to change the calendar? How's that work?

      A: OK, You may recall we have been using 365 days in a year, but you will also know that we've discovered this is incorrect -- we're falling behind. The Winter solstice is now mid-January, and we need to sort things out.

      TP: Yes, yes, that's fine, we'll just publish a decree to reset the date. Will that be all?

      A (quaking a little): You holiness, it's a bit more complicated. We need to add an occasional day to make things work out. A year is about 365.24 days.

      TP: Ah, so your first approximation is to add a day every four years?

      A (surprised): Your Holiness! You have an excellent grasp of the mathematics!

      TP: Yes, yes, thank you. But this gets us only part the way there. What else?

      A: Well, every hundred years we'll skip the extra day.

      TP: Is that it?

      A: Also, every four hundred years, we have to add it back in.

      TP: Well, that sounds fine. So we'll an extra day in December, and make it 32 days every .. once in a while?

      A: Well, your holiness, that is a possibility, but I'd like to suggest making the shortest month the recipient of this extra day. Say, February, which currently has just 28 days.

      TP: An extra day of winter? Are you sure that's wise?

      A: As you know, holiness, winter is 91 days, no matter when they fall.

      TP: Very well, very well. So, February 29th every now and then?

      A: Yes, that's all.

    Anyway, this is a Perl site, so the obligatory code snippet is

    sub is_leap_year { my $year = shift; # We assume that validation has taken place. if ( $year % 400 == 0 ) { return 1; } elsif ( $year % 100 == 0 ) { return 0; } elsif ( $year % 4 == 0 ) { return 1; } else { return 0; } }
    And I pray to the FSM that this code's right.

    And .. someone below will no doubt chime in about the details of the Julian calendar .. you're quite right, I did absolutely no research on this (apart from my likely faulty memory), but I just thought it would have been an entertaining discussion about Changing The Calendar .. although that far back, it probably had far less impact on most people living their lives.

      Peasant #1: Oy! What day is it?

      Peasant #2: Haven't the faintest. Epiphany was a few days ago, so late January, early February is my guess. Why do you care?

      P1: Good point. Just curious .. I heard they were changing the calendar.

      P2: Madness. Change the calendar? Why?

    Edit: Yeah, I got the code wrong. Fixed it already. ugh

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

PerlMonks - my haven of calmness and sanity
5 direct replies — Read more / Contribute
by cavac
on Jan 27, 2022 at 08:20

    It has taken me a long time to talk about this in public, but i think it's finally time to tell you: I am on the autistic spectrum.

    A lot has been written about the subject, so i wont bore you with too much detail. Autism is a sliding scale, with many a variation on how this can affect an individual.

    For me, i have trouble keeping a conversation going both ways (i tend to talk non-stop if i get any chance). For some strange reason, this is much easier in writing than it is in person. When i write (and read), i usually can take my time, and analyze what the other people are saying and slowly formulate my answers. In person, i can still do it (depending on the subject), but it is very stressful. I also have trouble understanding non-verbal cues, can't remember faces very well and stuff. To others, I also tend to have a very dark humor; for everything else i tend to apply logic. But mostly, for me it's a day-to-day struggle to appear somewhat normal in public and somehow muddle through the day without completely loosing my mind or doing something incredibly stupid. There are other things as well, but these are for another time, perhaps. But basically, think "high-functioning autism", i can hide my traits by many learned ways of coping with stuff, but this requires a lot of active concentration and it's quite stressful and exhausting to do (if you ever meet me in person, you'll probably notice my various social "skills" dropping fast whenever i am tired).

    The reason why i'm writing this is simple: PerlMonks has been a haven of calmness and sanity to me over many, many years. It gives me a chance to learn from and give back to others. Sometimes, i only lurk here without writing for months, then there are times when i'm ready to take on quest after quest to try and help out in SoPW. The discussions here are generally held in a calm and logical fashion that let me participate in my own way and at my own speed. And for this, i am eternally grateful to all of you.

    Thank you from the bottom of my heart!

    Edit: Ask me questions. I'll answer them if i can.

    perl -e 'use Crypt::Digest::SHA256 qw[sha256_hex]; print substr(sha256_hex("the Answer To Life, The Universe And Everything"), 6, 2), "\n";'
Locking a SQLite DB for tests
2 direct replies — Read more / Contribute
by bliako
on Jan 27, 2022 at 07:29

    I needed to lock a SQLite(3) database in order to test whether my code for writing to it fails gracefully, or my code for reading circumvents the lock by, lamely, copying it to a new file.

    After some help from Discipulus' google-fu I have ended using this for locking the DB: PRAGMA locking_mode = EXCLUSIVE; BEGIN EXCLUSIVE; . (unfortunately unlocking it with COMMIT; does not work for me and I unlock it with a disconnect).

    The test file will use a fork() whose child will open the db and lock it as above and sleep for some time before disconnecting (thus unlocking it). The parent will try to open the DB and hopefully be able to detect if locked or not.

    Here's the code:

    Update:

    And here is the code with Test::More Test::Fork which may be necessary as Test::More gets confused with the fork.

    Another update without the fork. Thinking again about it, there is no need for a fork, see Re^2: Locking a SQLite DB for tests. Sohere is one without the fork:

    Suggestions and improvements welcome. Also any advice on what Test module to use for code involving forks. There is Test::Fork which has many warnings and failed tests. See Update and also Re^2: Locking a SQLite DB for tests below by 1nickt..

    bw, bliako

Plotting a volcano eruption halfway across the globe
2 direct replies — Read more / Contribute
by cavac
on Jan 21, 2022 at 04:06

    A week or so ago there was this big volcano eruption in Tonga that created Tsunamis and such. Terrible stuff.

    I knew that big events like this can create pressure waves in the air that can travel across the globe. I just recently installed an air pressure sensor, a BME280 to my radio network. I had my doubts if such a cheap sensor could actually detect such faint changes in air pressure. Well, it's more sensitive than i thought

    Let's take a look at the relevant data:

    Air pressure BME + + 990 +---------------------------------------------------------- +--------------------------------------+ | + + + ** + + + + + + + + | 989.8 |-+ ** + +-| | *** + | | * * + | 989.6 |-+ ** * + +-| | * ****** + | 989.4 |-+ * * * + +-| | ** ** + | | * * * + | 989.2 |-+ ** * **** + +-| hPa | ** * ** * + | 989 |-+ *** * ** ** + **** +-| | **** ** * * *** +** ** | |* * ********* * ** ** *** * +* ** | 988.8 |************ * * * * + ** ******* +-| | ** * *** + ** ****** ********** | 988.6 |-+ * * *** + ***** ** +-| | *** + *** | | ** + ** | 988.4 |-+ + **| | + + + + + + + + + + + | 988.2 +---------------------------------------------------------- +--------------------------------------+ 15.01 15.01 15.01 15.01 15.01 15.01 15.01 + 15.01 15.01 15.01 15.01 15.01 18:00 18:30 19:00 19:30 20:00 20:30 21:00 + 21:30 22:00 22:30 23:00 23:30 Logtime UTC

    This corresponds quite well with data released by my government. So, it turns out you can use a cheap sensor from Ebay to detect volcano eruptions (or above ground nuclear tests). Fascinating!

    With a network of these sensors over a larger geographic area, it should be possible to triangulate the (approximate) location of an event like that.

    perl -e 'use Crypt::Digest::SHA256 qw[sha256_hex]; print substr(sha256_hex("the Answer To Life, The Universe And Everything"), 6, 2), "\n";'
Twenty Years and Counting!
No replies — Read more | Post response
by roho
on Jan 21, 2022 at 01:47
    I joined PerlMonks 20 years ago and never looked back. At that time I used Perl for the care and feeding of one of the largest relational databases in the Department of Defense, but because it was within the Intelligence Community there was little I could say about it. The use of Perl earned me the nickname "Mr. Magic", but the magic was in Perl, not in me. I took my signature line from an article in Datamation magazine in the 1980's, but it was over a decade later that I found the language that allowed me to get a lot done without working hard. Perl.

    It's been a great ride, but it's not over, not by a long shot. I have since retired from $work and now use Perl for projects at home. My heartfelt thanks to all of you for your generosity with your time and talent.

    "It's not how hard you work, it's how much you get done."

[OT] Merry Christmas and gift of love
7 direct replies — Read more / Contribute
by marioroy
on Dec 25, 2021 at 05:33

    Greetings, fellow Monks

    This is not Perl related but my friends live here.

    I ventured into Python and learned a lot. The theme is parallelization which is my passion. So, what better way to consume CPU cores than to explore the Mandelbrot Set in real time. Included in the GitHub repo are complementary CUDA and OpenCL demonstrations using PyCUDA and PyOpenCL respectively. To make things fast, Numba JITs Python code to C-like performance.

    https://github.com/marioroy/mandelbrot-python

    The various demonstrations work on FreeBSD, Linux, macOS, and Microsoft Windows. What about threads and GIL? Fortunately, not a problem. Meaning full CPU utilization on Windows. This is possible by specifying nogil=True for Numba and that releases the GIL.

    I wanted to finish by Christmas and there it is.

In Praise of Web 1.0
2 direct replies — Read more / Contribute
by jdporter
on Dec 15, 2021 at 13:39

    The Web Is F**ked, by Kev Quirk

    Web 1.0 wasn’t just about personal blogs, GeoCities and scrolling marquees. Oh no, dear reader. We had our own version of social media back in the day - the web forum.

    They were fantastic pieces of software that allowed communities to come together, discuss specific topics and generally hang out.

    If you read no other part of it, I encourage you to

    Familiarise yourself with POSSE and make your site the single source of truth for all your online content.
Employment Contract Oddity
1 direct reply — Read more / Contribute
by talexb
on Dec 15, 2021 at 13:01

    A good friend of mine was up for a contract recently, and having passed the technical hurdles, he was sent the paperwork for the job (this was for a very large, well-known manufacturer, and was through a recruiting agency).

    He read the contract, but had an issue with the part that said that in the event of a dispute between the agency and the manufacturer, he would be on the hook for all of the agency's legal fees. He communicated this to the agency, and their counter-offer was to suggest a full-time job instead.

    That didn't happen (presumably because the two parties couldn't agree on a fee), so he was dropped from consideration.

    I know about tilly's adventure, but .. being on the hook for someone else's legal fees? That's bizarre.

    Has anyone else come across strangeness in employment contracts?

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

Twenty laborious years -- and I'm glad to be here
2 direct replies — Read more / Contribute
by talexb
on Dec 12, 2021 at 08:54
      Happy Monkday!!1! You've been here 20 laborious years. You look marvelous!

    I sing with a group of top-notch musicians (our website) that I joined back in '98, because I wanted to challenge myself to become a better singer and performer. I did the same thing when I joined this website -- to learn and get better about everything to do with Perl.

    Since my background in development languages was C and assembler, my early Perl code looked suspiciously like C. That was just my 'accent' talking. I've become a much more fluent reader and writer of Perl since then. And I owe that improvement to this community, to The Perl Foundation for supporting annual conferences, and to the regular Perlmonger meetings I attend (and host in Toronto).

    I continue to be heartened about the progress that Perl development makes -- there are still regular releases, and Ovid is making progress with his OO project Corinna. And there are new modules and updates popping up on MetaCPAN every week. So much for the Greek chorus chanting 'Perl is dead' every year.

    The quote I had planned to close with turns out to be made up (about Pablo Casal's contining to practise at age 80, because he felt he was '.. making progress.' here), but still, I like the idea of continuing to practise, even after 20+ years of using a technology, or being a musician. If I get a little better every day, every week, that's progress. I like that.

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

sometimes no Perl news is good news
4 direct replies — Read more / Contribute
by zentara
on Nov 21, 2021 at 08:09
    Greetings fellow perlmonks, I am not dead yet, and I'm still iterating away. Came close, but no cigar. :-)

    With all the talk of Perl being dead, being surpassed by the illustrious university-backed Python, Javascript and Ruby, I find that Perl is often left off of important lists.... such as this one. https://thehackernews.com/2021/11/11-malicious-pypi-python-libraries.html where it states:

    "Efforts to target popular code registries like Node Package Manager (NPM) JavaScript registry, PyPI, and RubyGems have become commonplace and a new frontier for an array of attacks".

    Just another list that Perl didn't make. :-)


    I'm not really a human, but I play one on earth. ..... an animated JAPH
Spoiled by Perl
7 direct replies — Read more / Contribute
by afoken
on Oct 30, 2021 at 21:10

    Some context: My initial problem of making sense of a pile of Excel VBA junk (see [OT] Finding similar program code) is largely solved, and I have started re-implementing the calculations in C#. C# is obviously not my first language, neither the second or third one. It's more somewhere around number 20. I've lost count. Ranting about a certain Hunchback-Gollum-Salvatore C derivate caused a misunderstanding and triggered a reply by jdporter:

    wait - do you mean C#? Because imho C# is a great language.

    Jdporter is not alone, I've already discussed a lot with my coworker, who really likes C#.

    The re-implementation is my first C# project, after a tiny "hello world" command line program just to test the VS2019 installation. I have already helped to debug some C# software, but rarely on the code level, more on the algorithm level, and of course some rubber duck debugging like "a < 10 looks wrong if you want to check that a is larger than 10".

    C# is no huge surprise. It is just another language derived from C and some other languages, with OOP, and with its own set of quirks, strengths, and weaknesses. C# is designed for OOP, and supports OOP much better than some other langauges. OOP is not an afterthought, it is clearly part of the original design. Over the years, some syntatic sugar was added to the existing syntax, allowing to write quite short, but still readable code.

    But I miss some really trivial things I'm used to in Perl:

    The <=> and cmp operators together with ||

    In C#, many classes (e.g. List<T>) implement a Sort() method that expects the C# equivalent of a compare function. You end writing something like this for a simple compare:

    someList.Sort((a, b) => a.Foo.CompareTo(b.Foo));

    Well, CompareTo() is not pretty, but still acceptable. I would prefer the (invalid) C# example below, perhaps using operator overloading to call CompareTo() behind the scenes. Unfortunately, C# has no <=> operator that could be overloaded.

    someList.Sort((a, b) => a.Foo <=> b.Foo);

    Compare to Find:

    var first = someList.Find(e => e.Foo >= bar);

    Compare to sort in Perl:

    @someList = sort { $a->Foo <=> $b->Foo } @someList;

    Things get ugly if you want to sort by more than one property:

    @someList = sort { $a->Foo <=> $b->Foo || $a->Bar cmp $b->Bar } @someL +ist;

    In C#, I ended up with that:

    someList.Sort( (a, b) => { int rv = a.Foo.CompareTo(b.Foo); if (rv == 0) { rv = a.Bar.CompareTo(b.Bar); } return rv; } );

    You can't use a.Foo.CompareTo(b.Foo) || a.Bar.CompareTo(b.Bar) in C#, because || is strictly boolean.

    (Yes, I know that LINQ exists and has its own syntax plus extension methods to work with data in a way similar to SQL.)

    redo

    Restart a loop block, bypassing the conditional. See redo. It simply does not exist in C#. You have to use goto, which is at least ugly; or use an inner loop, which opens another can of worms (see below).

    I rarely need redo, but some of the calculations need a redo. In VBA, it was simply implemented via goto jumping backwards over some hundred lines of code. My C# code also uses goto, for the lack of a better loop control.

    next LABEL, last LABEL, redo LABEL

    Again, those do not exist in C#. You can not get out of an inner loop AND start the next iteration of an outer loop, exit the outer loop, or restart an outer loop. Again, you have to use goto. If you need all three variants in a single set of two nested loops, you need three labels: One at the start of the outer loop to simulate redo, one at the end of the outer loop to simulate next, and one after the outer loop to simulate last. You could also break out of the inner loop and use a bunch of helper variables, which don't make the code more readable.

    Again, I rarely need to control an outer loop from an inner loop, but some of the calculations need that, too. Again, VBA used goto and jumped wildly around, and my C# code also uses goto where I could not avoid it.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)
IntelliJ IDEA for Perl !! Try it, use it, BE HAPPY !!
6 direct replies — Read more / Contribute
by ait
on Oct 14, 2021 at 13:05

    Hi there! ye fellow monks.

    Just writing to report that I've been trying out and actually using IntelliJ IDEA Community for Perl on a daily basis and it works AMAZINGLY WELL!!!

    I am so happy, that if JetBrains would charge to commercially support it, I would actually upgrade to IJ Pro. It's THAT good, IMHO.

    A HUGE shoutout and THANK YOU to Alexandr Evstigneev!! (Apparently hurricup here on PM).
    Here's the plugin page: https://plugins.jetbrains.com/plugin/7796-perl

    Also, a thank you to JetBrains for such a great IDE (I use it in my day job every day for years now).

    Features I like so far:

    • Good and smart syntax highlighting
    • Refactor/renaming stuff
    • Autocompletion
    • Running a script inside the IDE console
    • Debugging with point and click breakpoints, watchers, evaluations (basically all you have in Java)
    • Jumping to implementation (i.e. Goto -> declaration/implementation actually works and drills into modules, etc.)
    • Find in path is a great IJ feature and works nicely with Perl code
    • Specific support for: mason, TT2, Mojolicious, and embedded Perl (I haven't tested all of these)

    BTW, It may seem/feel ironic that a Java IDE is probably the best tool for Perl in 2021, and painful that we can't get our crap together with Padre, but hell, anything that helps Perl adoption is good in my book. Yeah, even if it's written in Java. Besides, many people currently making a living in the JDK ecosystem, could quickly try and adopt things like Mojo or Dancer if you can integrate seamlessly into their workflow so it's a win, win, win for everyone.

    Best,
    Alex

Research into occasional participation in Perl/Raku development
2 direct replies — Read more / Contribute
by talexb
on Sep 30, 2021 at 21:11

    If you have any experience with helping out with Perl/Raku, there's a survey that could use your help. I took part a few weeks back, and had a really good conversation with the research assistant.

      Dr. Ann Barcomb (her website) of the University of Calgary is conducting research to understand episodic, or occasional, participation in the Perl/Raku community, in collaboration with The Perl Foundation. The results of her research will be provided as a TPF report and will assist the community in improving practices for managing episodic participation. Please consider assisting them by taking the survey about your participation in the Perl/Raku community. The link to the survey is here.

    Thanks!

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.


Add your Meditation
Title:
Meditation:
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, details, 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, summary, 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.