Dear all, Not being an expert in new-fangled technology ("what do you mean, I'm not allowed to use assembly code?") I am trying to write a .cgi module to handle a form's data. (Primarily using a perl reference book, but that is by the by). My understanding is that I can write a cgi module to create AND handle data from a form. So I did, but I am having trouble making the (software) decision as to how to progress upon code execution. Please note that it is for historical reasons that I use HTML::Tiny and not CGI but that is not part of the problem, unless corrected here
# Start the page and form creation process as required
$co = HTML::Tiny->new( mode => 'html' );
if ($co->param())
{
#data returned from the form submission
print "data present - to be analysed\n";
$buffer = "";
if($ENV{'REQUEST_METHOD'} eq "POST")
{
# POST method retrieves data by the READ command
print "POST read\n";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else
{
# GET method retrieves by accessing the relevant environment v
+ariable
print "Query String\n";
$buffer = $ENV{'QUERY_STRING'};
}
print ("buffer=<p>$buffer</p>");
if (length ($buffer) > 0)
{
# Analyse the form data ....
}
else
{
print "<p>buffer size is zero<p>";
exit;
}
}
else
{
# No data passed to here by a submit - create the display form tha
+t is required to do so
print "no data present -to display form\n";
displayForm();
}
When I run this code (on a server) I get the diagnostics saying that there is "data present - to be analysed" (as if this call is to handle the form data) but then in the next breath the diagnostics say that the "buffer size is zero". I had a minor thought that the data was somehow being 'retained' somewhere and each time that I ran the script, the 'retained' data was being retested. SO I shut everything down overnight, re-running in the morning, but the same 'problem' presents itself
Q: What is the failing in my software logic here? Have I misread/misunderstood/misinterpreted what I have read in my perl book? As always any help from the monastery would be gratefully received. Regards ADB
|
I have Bezier curves which I want to approximate with circular arcs.
Does anyone know how best to do this with Perl?
For example I wondered if there were any 'standard' functions or modules that would help.
|
use strict;
use warnings;
use feature 'say';
use MCE::Map;
MCE::Map-> init(
chunk_size => 1,
max_workers => 4,
user_begin => sub {
print "## ", MCE-> wid, " started\n";
},
user_end => sub {
print "## ", MCE-> wid, " completed\n";
},
);
my @a = MCE::Map-> run( sub { $_ }, [ 0 .. 9 ]);
print "\n", "@a", "\n";
say $MCE::VERSION;
This, of course, prints:
## 1 started
## 3 started
## 2 started
## 4 started
## 1 completed
## 3 completed
## 2 completed
## 4 completed
0 1 2 3 4 5 6 7 8 9
1.882
I want to make dependency on MCE, in my module, very optional i.e. triggered by rare circumstances only. Replacing "use" with "require" results in just first 4 lines of output and process running indefinitely, 4 cores fully loaded.
MCE::Map being just a convenience, I can do this instead:
use strict;
use warnings;
use feature 'say';
require MCE;
my @in = ( 0 .. 9 );
my @out;
my $mce = MCE-> new(
chunk_size => 1,
max_workers => 4,
user_begin => sub {
print "## ", MCE-> wid, " started\n";
},
user_end => sub {
print "## ", MCE-> wid, " completed\n";
},
user_func => sub { MCE-> gather( $_ )},
input_data => \@in,
gather => \@out,
);
$mce-> run;
say "@out";
$mce-> shutdown;
And it runs perfectly. I understand I'll have to deal now with ordering of the output, it's not an issue. But that's the reason I was hoping to use MCE::Map to make it easier. Is this a bug?
In general, is very optional (documented) dependency on something big and complex as MCE a bad-bad-bad idea? I guess I'll have to indicate minimum required MCE version then, which for example above would be... 1.500?
|
%SIG says "When a __DIE__ hook routine returns, the exception processing continues as it would have in the absence of the hook, unless the hook routine itself exits via a goto &sub, a loop exit, or a die()". Presumably "continues as it would have in the absence of the hook" means it dies, but what does "the hook routine itself exits via ... a loop exit" mean? Attempts:
$ perl -Mstrict -wE'$SIG{__DIE__}=sub{last}; die "hi"'
Exiting subroutine via last at -e line 1.
Can't "last" outside a loop block at -e line 1.
# no strict
$ perl -wE'$SIG{__DIE__}=sub{last}; die "hi"'
Exiting subroutine via last at -e line 1.
Can't "last" outside a loop block at -e line 1.
# no warnings
$ perl -E'$SIG{__DIE__}=sub{last}; die "hi"'
Can't "last" outside a loop block at -e line 1.
# -e instead of -E
$ perl -e'$SIG{__DIE__}=sub{last}; die "hi"'
Can't "last" outside a loop block at -e line 1.
# put last in a while loop, dies
$ perl -e'$SIG{__DIE__}=sub{while(1){last}}; die "hi"'
hi at -e line 1.
# put last in a non-loop block, dies
$ perl -e'$SIG{__DIE__}=sub{{last}}; die "hi"'
hi at -e line 1.
Edit:
$ perl --version
This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-ms
+ys-thread-multi
|
Greetings Monks -
I have a client that is thinking of switching from ActiveState Perl to Strawberry Perl. Do you know how heavy a lift this will be?
Staying with Windows is a requirement. They have over a hundred CGI based apps that use Inline::Java and JDBC for database connectivity.
Any advice/opinions would be appreciated.
|
This time I'll put the question first: "How worried should I be?" I set up a build of the most recent Debian archive of stable perl (v5.40.1) and saw the following failures in Time::HiRes:
cwd: ~/build/perl/perl-debian-5.40/t
Ran shell command:
./perl harness 2>&1 | egrep --color -i -e 'Fail' -
Got output:
-------------------------------------
# Failed test 'atime set correctly'
# Failed test 'mtime set correctly'
# Failed test 'atime set correctly'
# Failed test 'mtime set correctly'
# Failed test 'File 1 atime set correctly'
# Failed test 'File 1 mtime set correctly'
# Failed test 'File 2 atime set correctly'
# Failed test 'File 2 mtime set correctly'
# Looks like you failed 8 tests of 22.
Failed 8/22 subtests
../dist/Time-HiRes/t/utime.t (Wstat: 2048 (exited 8) Tests: 22 Failed: 8)
Failed tests: 2-3, 5-6, 12-15
-------------------------------------
Perl release v5.40.1
Module packed with Perl: Time::HiRes v1.9777
Linux version 6.1.0-12-686
Debian 6.1.52-1 (2023-09-07)
I looked at http://matrix.cpantesters.org/ but I haven't learned to interpret the test matrix yet (I'm pleading ignorance when really I am probably just too distracted right now).
Mar 05, 2025 at 02:47 UTC
A just machine to make big decisions
Programmed by fellows (and gals) with compassion and vision
We'll be clean when their work is done
We'll be eternally free yes, and eternally young
Donald Fagen —> I.G.Y.
(Slightly modified for inclusiveness)
|
Hi Monks-
I'm asking for help installing Compress::Stream::Zstd in Strawberry Perl on a windows 10 box.
Here is what I've done so far:
- Download & install fresh version of Strawberry Perl
- Ran in command window: perl -MCPAN -e shell
- Tried to install module: cpan> install Compress::Stream::Zstd
It fails in the following way:
cpan> install Compress::Stream::Zstd
Running install for module 'Compress::Stream::Zstd'
...
Building Compress-Stream-Zstd
gcc -c -std=c99 -DWIN32 -DWIN64 -DPERL_TEXTMODE_SCRIPTS -DMULTIPLICITY
+ -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D__USE_MINGW_ANSI_STDIO -fwrapv -f
+no-strict-aliasing -mms-bitfields -Wall -Wextra -Wno-parentheses -Wno
+-unused -Wno-unused-parameter -I. -Iext/zstd/lib -DZSTD_LEGACY_MULTIT
+HREADED_API -Os -falign-functions -falign-jumps -falign-labels -falig
+n-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blo
+cks-and-partition "-DVERSION=\"0.206\"" "-DXS_VERSION=\"0.206\"" -I"C
+:\STRAWB~1\perl\lib\CORE" -I"C:\STRAWB~1\c\include" -o "lib\Compress\
+Stream\Zstd.o" "lib\Compress\Stream\Zstd.c"
ExtUtils::Mkbootstrap::Mkbootstrap('blib\arch\auto\Compress\Stream\Zst
+d\Zstd.bs')
Generating script 'lib\Compress\Stream\Zstd.lds'
g++ "lib\Compress\Stream\Zstd.def" -o "blib\arch\auto\Compress\Stream\
+Zstd\Zstd.xs.dll" -Wl,--enable-auto-image-base -shared -s -L"C:\STRAW
+B~1\perl\lib\CORE" -L"C:\STRAWB~1\c\lib" -L"C:\STRAWB~1\c\x86_64-w64-
+mingw32\lib" -L"C:\STRAWB~1\c\lib\gcc\x86_64-w64-mingw32\13.2.0" "lib
+\Compress\Stream\Zstd.lds" -pthread ext/zstd/lib/libzstd.a
C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x
+86_64-w64-mingw32/bin/ld.exe: cannot find ext/zstd/lib/libzstd.a: No
+such file or directory
collect2.exe: error: ld returned 1 exit status
error building blib\arch\auto\Compress\Stream\Zstd\Zstd.xs.dll from "l
+ib\Compress\Stream\Zstd.o" at C:/Strawberry/perl/lib/ExtUtils/CBuilde
+r/Platform/Windows.pm line 241.
...
I believe the problem is that it cannot find the ext/zstd/lib/libzstd.a library. Is there some place I can download this from (for x86_64), or build it myself? Once built, where do I put it so that the CPAN install can find it?
Thanks in advance for any help on this!
-Craig
PS: Here is the complete CPAN output:
|
I was trying to download Lingua::EN::Lemmatize, but cpan couldn't find it. Any suggestion will be greatly appreciated. Thanks!
|
I'm trying to figure out why prove's --merge option gives me different output after running this test file:
use strict;
use warnings;
use Test::More;
ok 1;
ok 0;
done_testing();
|
I wonder if someone could tell me why this code is not working. It is to sort the records from highest percent to lowest. (I edited the regexp in split)
Found one error. the mao{$_[0]} should be map {$_->[0]} and the split needed a newline (\n) at the end of the pattern split(/(?<=workspace\/data)\n/, $s)
Now, I'm getting the correct sorted output.
C:\Old_Data\perlp>perl try3.pl
>>> prd1702
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 746G 3.1T 23% /wor
+kspace/data
>>> prd1703
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 687G 3.2T 18% /wor
+kspace/data
>>> prd1701
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 887G 3.0T 13% /wor
+kspace/data
(Below, the code before fixes noted above)
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
#https://stackoverflow.com/questions/79472778/sorting-the-content-of-a
+-file
my $s = <<EOF;
>>> prd1701
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 887G 3.0T 13% /wor
+kspace/data
>>> prd1702
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 746G 3.1T 23% /wor
+kspace/data
>>> prd1703
Filesystem Size Used Avail Use% Moun
+ted on
/workspace 3.9T 687G 3.2T 18% /wor
+kspace/data
EOF
my @data = map {$_[0]}
sort {$b->[1] <=> $a->[1]}
map {[$_, /\s(\d+)%/]} split(/(?<=workspace\/data)/, $s);
It is printing error as:
C:\Old_Data\perlp>perl try3.pl
Use of uninitialized value in numeric comparison (<=>) at try3.pl line
+ 23.
Use of uninitialized value in numeric comparison (<=>) at try3.pl line
+ 23.
|