in reply to Re: substitution with regex
in thread substitution with regex

Just wondering what exactly is the purpose of the sprintf and %d/%d?

Replies are listed 'Best First'.
Re^3: substitution with regex
by Athanasius (Archbishop) on Jan 23, 2018 at 06:46 UTC

    Hello drose2211,

    The sprintf function applies the formatting specified in the template supplied as its first argument, to produce a string using the remaining arguments. In this case, the template ' %d/%d ' means: print a space, followed by the next argument formatted as an integer, followed by a slash, followed by the next argument formatted as an integer, followed by a space. Without the sprintf function, the code would be longer and less elegant:

    $line =~ s{ \s (M?\d{2}) / (M?\d{2}) \s } { ' ' . int(convert($1)) . '/' . int(convert($2)) . ' ' }xeg +;

    (Perl’s printf and sprintf functions are derived from their equivalents in C. In Perl, there is also print, which does not take a template, but there is no corresponding sprint.)

    Hope that helps,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Re^3: substitution with regex
by AnomalousMonk (Archbishop) on Jan 23, 2018 at 12:15 UTC

    drose2211:   Further to Athanasius's post:   Note also that the  s/// substitution operator needs the  /e modifier to be able to evaluate an arbitrary expression in its replacement block. See  s/PATTERN/REPLACEMENT/ in Regexp Quote-Like Operators in perlop.


    Give a man a fish:  <%-{-{-{-<