Hello All,

I am getting the infamous Argument ___ isn't numeric in sprintf. I've looked around but I can't seem to fix the issue. It seems to occur if it has a 0. in front of the numeric pattern that causes it. Does anyone have any idea of what I need to alter to fix it?

Here are the results from the perl script:

C:\XAMPP\perl\bin>perl reddrill.pl
Content-type: text/html

<html>          <!-- start tag for the HTML page -->
<head>  <!-- header data like the window title -->
<title>Wonu LLC</title>
#Cascading Style Sheet(CSS)definitions (and/or links) go here JavaScript or VBSc
ript function definitions and/or links.
</head>
<body>  <!-- the page's main HTML code -->
<h3>Stock Quotes</h3>
<table border ='1' cellpadding='5' cellspacing='0'>
<tr>
 <th>Name</th>
 <th>Last</th>
 <th>Previous</th>
 <th>High</th>
 <th>Low</th>
 <th>Change</th>
 <th>%Change
</th>
 </tr>
<tr>/n          <td>Apollo Group</td>
                <td align='right'>91.86</td>
                <td align='right'>92.07</td>
                <td align='right'>92.71</td>
                <td align='right'>91.70</td>
                <td align='right'>-0.21</td>
Argument "-0.23%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>-0.23</td>
</tr>
<tr>/n          <td>Babson Value</td>
                <td align='right'>44.25</td>
                <td align='right'>43.95</td>
                <td align='right'>44.25</td>
                <td align='right'>44.25</td>
                <td align='right'>0.30</td>
Argument "0.68%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.68</td>
</tr>
<tr>/n          <td>Baron Asset</td>
                <td align='right'>47.92</td>
                <td align='right'>47.61</td>
                <td align='right'>47.92</td>
                <td align='right'>47.92</td>
                <td align='right'>0.31</td>
Argument "0.65%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.65</td>
</tr>
<tr>/n          <td>Baron Small Cap</td>
                <td align='right'>20.28</td>
                <td align='right'>20.18</td>
                <td align='right'>20.28</td>
                <td align='right'>20.28</td>
                <td align='right'>0.10</td>
Argument "0.50%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.50</td>
</tr>
<tr>/n          <td>Credit Suisse Capital Apprec Comm</td>
                <td align='right'>15.67</td>
                <td align='right'>15.63</td>
                <td align='right'>15.67</td>
                <td align='right'>15.67</td>
                <td align='right'>0.04</td>
Argument "0.26%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.26</td>
</tr>
<tr>/n          <td>Credit Suisse Emerging Growth Comm</td>
                <td align='right'>29.55</td>
                <td align='right'>29.60</td>
                <td align='right'>29.55</td>
                <td align='right'>29.55</td>
                <td align='right'>-0.05</td>
Argument "-0.17%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>-0.17</td>
</tr>
<tr>/n          <td>DeVry</td>
                <td align='right'>32.09</td>
                <td align='right'>31.90</td>
                <td align='right'>32.31</td>
                <td align='right'>31.75</td>
                <td align='right'>0.19</td>
Argument "0.60%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.60</td>
</tr>
<tr>/n          <td>Eaton Vance Tax-Mgd Growth 1.1 A</td>
                <td align='right'>21.44</td>
                <td align='right'>21.31</td>
                <td align='right'>21.44</td>
                <td align='right'>21.44</td>
                <td align='right'>0.13</td>
Argument "0.61%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.61</td>
</tr>
<tr>/n          <td>Eaton Vance Tax-Mgd Growth 1.2 A</td>
                <td align='right'>9.63</td>
                <td align='right'>9.57</td>
                <td align='right'>9.63</td>
                <td align='right'>9.63</td>
                <td align='right'>0.06</td>
Argument "0.63%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.63</td>
</tr>
<tr>/n          <td>Fidelity Aggressive Growth</td>
                <td align='right'>15.83</td>
                <td align='right'>15.76</td>
                <td align='right'>15.83</td>
                <td align='right'>15.83</td>
                <td align='right'>0.07</td>
Argument "0.44%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.44</td>
</tr>
<tr>/n          <td>Fidelity Contrafund</td>
                <td align='right'>51.57</td>
                <td align='right'>51.38</td>
                <td align='right'>51.57</td>
                <td align='right'>51.57</td>
                <td align='right'>0.19</td>
Argument "0.37%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.37</td>
</tr>
<tr>/n          <td>Fidelity Disciplined Equity</td>
                <td align='right'>23.38</td>
                <td align='right'>23.27</td>
                <td align='right'>23.38</td>
                <td align='right'>23.38</td>
                <td align='right'>0.11</td>
Argument "0.47%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.47</td>
</tr>
<tr>/n          <td>Fidelity Growth & Income</td>
                <td align='right'>36.32</td>
                <td align='right'>36.13</td>
                <td align='right'>36.32</td>
                <td align='right'>36.32</td>
                <td align='right'>0.19</td>
Argument "0.53%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.53</td>
</tr>
<tr>/n          <td>Fidelity Low-Priced Stock</td>
                <td align='right'>36.92</td>
                <td align='right'>36.73</td>
                <td align='right'>36.92</td>
                <td align='right'>36.92</td>
                <td align='right'>0.19</td>
Argument "0.52%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.52</td>
</tr>
<tr>/n          <td>Fidelity Magellan</td>
                <td align='right'>100.14</td>
                <td align='right'>99.56</td>
                <td align='right'>100.14</td>
                <td align='right'>100.14</td>
                <td align='right'>0.58</td>
Argument "0.58%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.58</td>
</tr>
<tr>/n          <td>Fidelity Select Biotechnology</td>
                <td align='right'>58.09</td>
                <td align='right'>57.55</td>
                <td align='right'>58.09</td>
                <td align='right'>58.09</td>
                <td align='right'>0.54</td>
Argument "0.94%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.94</td>
</tr>
<tr>/n          <td>Fidelity Select Electronics</td>
                <td align='right'>41.69</td>
                <td align='right'>42.35</td>
                <td align='right'>41.69</td>
                <td align='right'>41.69</td>
                <td align='right'>-0.66</td>
Argument "-1.56%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>-1.56</td>
</tr>
<tr>/n          <td>Fidelity Select Food & Agriculture</td>
                <td align='right'>46.70</td>
                <td align='right'>46.27</td>
                <td align='right'>46.70</td>
                <td align='right'>46.69</td>
                <td align='right'>0.43</td>
Argument "0.93%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.93</td>
</tr>
<tr>/n          <td>Fidelity Small Cap Independence</td>
                <td align='right'>18.77</td>
                <td align='right'>18.70</td>
                <td align='right'>18.77</td>
                <td align='right'>18.77</td>
                <td align='right'>0.07</td>
Argument "0.37%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.37</td>
</tr>
<tr>/n          <td>Fidelity Spartan MA Municipal Income</td>
                <td align='right'>12.11</td>
                <td align='right'>12.08</td>
                <td align='right'>12.11</td>
                <td align='right'>12.11</td>
                <td align='right'>0.03</td>
Argument "0.25%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.25</td>
</tr>
<tr>/n          <td>Fidelity Value</td>
                <td align='right'>65.52</td>
                <td align='right'>65.04</td>
                <td align='right'>65.52</td>
                <td align='right'>65.52</td>
                <td align='right'>0.48</td>
Argument "0.74%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.74</td>
</tr>
<tr>/n          <td>Julius Baer International Equity A</td>
                <td align='right'>28.02</td>
                <td align='right'>27.81</td>
                <td align='right'>28.02</td>
                <td align='right'>28.02</td>
                <td align='right'>0.21</td>
Argument "0.76%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>0.76</td>
</tr>
<tr>/n          <td>SumTotal Systems Inc.</td>
                <td align='right'>7.59</td>
                <td align='right'>7.64</td>
                <td align='right'>7.65</td>
                <td align='right'>7.40</td>
                <td align='right'>-0.05</td>
Argument "-0.65%\n" isn't numeric in sprintf at reddrill.pl line 17.
                <td align='right'>-0.65</td>
</tr>
</table>
</body> <! --end tag for main page section -->
</html> <!-- end tag for entire HTML page -->

And here is the code

#!C:\XAMPP\perl\bin -w
use English; #allow long built-in variable names
#this line sets the MIME type
print "Content-type: text/html\n\n";
print <<HEADER;#remember: no spaces after << !
<html>       <!-- start tag for the HTML page -->
<head>   <!-- header data like the window title -->
<title>Wonu LLC</title>
#Cascading Style Sheet(CSS)definitions (and/or links) go here JavaScript or VBScript function definitions and/or links.
</head>
<body>   <!-- the page's main HTML code -->
HEADER
use vars qw ($StockName $LastPrice $PrevClose $High $Low $Change $PctChange); 
# return argument with two decimal places
sub twodec
{
return sprintf("%0.2f",$_[0]);
}# read stock data
open STOCKS, "StockQuotes.csv" #open input file
    or die print "<i>Processing error:&nbsp;</i> $OS_ERROR.";
    my @quotes = <STOCKS>;       #read data all at once
close STOCKS;           #close input file
# display page header, read file and start table
print "<h3>Stock Quotes</h3>\n";
print "<table border ='1' cellpadding='5' cellspacing='0'>\n";
#process each line of the file in turn
foreach $line (@quotes)  #$line is the variable for each line returned from the file
{
($StockName, $LastPrice, $PrevClose, $High, $Low, $Change, $PctChange) = split(",", $line);#it takes each line and analyzes if the first line equals $StockName if so, it then takes each data in the line and splits with a comma and then places each one in each row.
if ($StockName eq "Name") #column heads.  The first row of the spreadsheet is the header rows. And the first cell is the Name column
{
print "<tr>\n";
print " <th>$StockName</th>\n";
print " <th>$LastPrice</th>\n";
print " <th>$PrevClose</th>\n";
print " <th>$High</th>\n";
print " <th>$Low</th>\n";
print " <th>$Change</th>\n";
print " <th>$PctChange</th>\n";
print " </tr>\n";
next ;
}
print "<tr>/n";      #data rows
print "     <td>$StockName</td>\n";
print "     <td align='right'>", twodec($LastPrice), "</td>\n";
print "     <td align='right'>", twodec($PrevClose), "</td>\n";
print "     <td align='right'>", twodec($High),       "</td>\n";
print "     <td align='right'>", twodec($Low),        "</td>\n";
print "     <td align='right'>", twodec($Change),     "</td>\n";
print "     <td align='right'>", twodec($PctChange, 0, -1), "</td>\n";
print "</tr>\n";
}
print "</table>\n";#end table
print <<FOOTER;
</body> <! --end tag for main page section -->
</html>  <!-- end tag for entire HTML page -->
FOOTER
#Had to add a newline after FOOTER
#to avoid newline terminating error

Dani AI

Generated

The warning is not a Perl bug — it’s a data problem. The percentage field still contains non-numeric characters (a trailing percent sign and the newline from reading the CSV), so sprintf in twodec is being fed a string like -0.23% instead of a pure number. Removing -w (as did) only hides the warning; it does not fix the malformed data.

Fixes to apply (minimal, fast):

  • Remove the newline before splitting the line: chomp $line;.
  • Trim and strip the percent sign from the percent field before calling twodec. Example sanitization:
chomp $line;
# (after splitting)
$PctChange =~ s/^\s+|\s+$//g;   # trim
$PctChange =~ s/%$//;          # drop trailing percent sign

After that call twodec($PctChange) (don’t pass extra unused arguments like twodec($PctChange,0,-1) — they just confuse readers).

Other improvements to prevent similar problems:

  • Fix the literal /n typo in the HTML row printing (use \n for a newline).
  • Re-enable warnings and use use strict; use warnings; so real problems are visible while you fix data handling.
  • Use three-arg open and lexical filehandles (open my $fh, '<', 'StockQuotes.csv') and consider Text::CSV for robust CSV parsing (commas inside fields, quoted fields, etc.).
  • If you want an extra sanity check, use Scalar::Util::looks_like_number or a regex guard before formatting, and decide how to display non-numeric values (empty cell, N/A, etc.).

Summary: don’t suppress the warning — chomp the input, strip the %, then call sprintf on a clean number. This eliminates the sprintf warning and leaves other useful warnings intact.

This is resolved I just took off the -w, my regards on this :(

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.