I am by no means a perl wizard, but if you would describe the problem I can see if I can help!
Announcement
Collapse
No announcement yet.
any perl wizards in here?
Collapse
This topic is closed.
X
X
-
any perl wizards in here?
http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.Tags: None
-
of course, what do stupid windows people know about perl?
ok, I've added this code on one of the forums scripts which limits the numbers of threads one can make per X days to 1(this is enabled only for the off-topic forum)
Code:# Multiple post per day check if (($Status ne "Administrator") && ($Status ne "Moderator")) { if ($number == 23) { $numDaysToWait = 1; @finalPList = (); $nowListTime = time; if (-e "$MembersPath/postedlist.cgi") { open (POSTED, "$MembersPath/postedlist.cgi"); @postedList =
; close (POSTED); foreach $hasPosted (@postedList) { ($UserHP, $DateHP, $ForumNumHP) = split(/\|\!\|/, $hasPosted); chomp($ForumNumHP); if (($nowListTime - $DateHP) < ($numDaysToWait * 86400)) { push @finalPList, $hasPosted; if (($UserHP eq $UserName) && ($ForumNumHP == $number)) { &StandardHTML("Sorry, but you may only post one new topic in this forum once every $numDaysToWait day."); exit; } } } } open (POSTED, ">$MembersPath/postedlist.cgi"); print POSTED @finalPList; print POSTED "$UserName|!|$nowListTime|!|$number\n"; close (POSTED); chmod (0666, "$MembersPath/postedlist.cgi"); } }
I'm sure it's something easy, but above my level of perl knowledge
Comment
-
I've never written a PERL program before, so I don't know how good or bad my style is, but this should do the job (give or take a few syntax errors).
if ((($Status ne "Administrator") && ($Status ne "Moderator")) | | ($UserName ne "Mark von Wagner")) {
if ($number == 23) {
$numDaysToWait = 1;
$numberOfThreads = 3;
@finalPList = ();
$nowListTime = time;
if (-e "$MembersPath/postedlist.cgi") {
open (POSTED, "$MembersPath/postedlist.cgi");
@postedList = ;
close (POSTED);
$userFound = 0;
foreach $hasPosted (@postedList) {
@DateHPs = ();
$slotsFound = 0;
($UserHP,$ForumNumHP,$DateHP) = split(/\|\!\|/, $hasPosted, 3);
chomp($DateHP);
for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
($dateTemp, $DateHP) = split(/\|\!\|/, $hasPosted, 2);
push @DateHPs, $dateTemp;
if(($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) {
$slotsFound++;
}
}
if (($UserHP eq $UserName) && ($ForumNumHP == $number)) {
$userFound = 1;
if($slotsFound == 0) {
&StandardHTML("Sorry, but you may only post $numberOfThreads new topics in this forum every 24 hours.");
exit;
}
else {
$flag1 = 0;
$slotsFound = $slotsFound - 1;
$hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
foreach $dateTemp(@DateHPs) {
if ((($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) && ($flag1 == 0)) {
$flag1 = 1;
$dateTemp = $nowListTime;
}
$hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
}
}
push @finalPList, $hasPosted;
}
else if (($slotsFound < $numberOfThreads)) {
$hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
foreach $dateTemp(@DateHPs) {
$hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
}
push @finalPList, $hasPosted;
}
}
if($userFound == 0){
$oldListTime = $nowListTime - 86400 * numDaysToWait;
$hasPosted = sprintf("%s|!|%s|!|%d", $UserHP,$ForumNumHP, $nowListTime);
for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
$hasPosted = sprintf("%s|!|%d",$hasPosted,$oldListTime);
}
push @finalPList, $hasPosted;
}
}
open (POSTED, ">$MembersPath/postedlist.cgi");
print POSTED @finalPList;
close (POSTED);
chmod (0666, "$MembersPath/postedlist.cgi");
}
}
Edit: Corrected indenting
[This message has been edited by Mark von Wagner (edited June 17, 2000).]main(i,_){for(!_||(--i,main(i+2,i["FHhhTBFHdhTBFBQT\2TBF&]zRF$hh*:FHhh+&FBIsbDF"]));
i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_^=_,"\n")),_/=2);} /*- Mark -*/
Comment
-
Now, I don't have time for a real review right now, but reading the first line
if ((($Status ne "Administrator") && ($Status ne "Moderator")) | | ($UserName ne "Mark von Wagner")) {
The last | | should be an &&http://www.hardware-wiki.com - A wiki about computers, with focus on Linux support.
Comment
-
Sorry about the problems in my first version. As you can probably tell, I do most of my programming in C++, where things like "else if" are valid. Here is a corrected version that, at least in my tests, works correctly.
if (($Status ne "Administrator") && ($Status ne "Moderator")) {
if ($number == 23) {
$numDaysToWait = 1;
$numberOfThreads = 3;
$userFound = 0;
@finalPList = ();
$nowListTime = time;
if (-e "$MembersPath/postedlist.cgi") {
open (POSTED, "$MembersPath/postedlist.cgi");
@postedList =;
close (POSTED);
foreach $hasPosted (@postedList) {
@DateHPs = ();
$slotsFound = 0;
($UserHP,$ForumNumHP,$DateHP) = split(/\|\!\|/, $hasPosted, 3);
chomp($DateHP);
for($counter1 = 0; $counter1 < $numberOfThreads; $counter1++) {
($dateTemp, $DateHP) = split(/\|\!\|/, $DateHP, 2);
push @DateHPs, $dateTemp;
if(($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) {
$slotsFound++;
}
}
if (($UserHP eq $UserName) && ($ForumNumHP == $number)) {
$userFound = 1;
if($slotsFound == 0) {
&StandardHTML("Sorry, but you may only post $numberOfThreads new topics in this forum every 24 hours.");
exit;
}
else {
$flag1 = 0;
$slotsFound = $slotsFound - 1;
$hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
foreach $dateTemp(@DateHPs) {
if ((($nowListTime - $dateTemp) > ($numDaysToWait * 86400)) && ($flag1 == 0)) {
$flag1 = 1;
$dateTemp = $nowListTime;
}
$hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
}
}
$hasPosted = sprintf("%s\n",$hasPosted);
push @finalPList, $hasPosted;
}
else {
if (($slotsFound < $numberOfThreads)) {
$hasPosted = sprintf("%s|!|%s", $UserHP,$ForumNumHP);
foreach $dateTemp(@DateHPs) {
$hasPosted = sprintf("%s|!|%d",$hasPosted,$dateTemp);
}
$hasPosted = sprintf("%s\n",$hasPosted);
push @finalPList, $hasPosted;
}
}
}
}
if($userFound == 0){
$oldListTime = $nowListTime - (86400 * $numDaysToWait);
$hasPosted = sprintf("%s|!|%s|!|%d", $UserName,$number, $nowListTime);
for($counter1 = 1; $counter1 < $numberOfThreads; $counter1++) {
$hasPosted = sprintf("%s|!|%d",$hasPosted,$oldListTime);
}
$hasPosted = sprintf("%s\n",$hasPosted);
push @finalPList, $hasPosted;
}
open (POSTED, ">$MembersPath/postedlist.cgi");
print POSTED @finalPList;
close (POSTED);
chmod (0666, "$MembersPath/postedlist.cgi");
}
}
[This message has been edited by Mark von Wagner (edited June 17, 2000).]main(i,_){for(!_||(--i,main(i+2,i["FHhhTBFHdhTBFBQT\2TBF&]zRF$hh*:FHhh+&FBIsbDF"]));
i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_^=_,"\n")),_/=2);} /*- Mark -*/
Comment
-
quote:
Originally posted by MarkG on 06-17-2000 08:20 AM
else if does not work on perl
[This message has been edited by MarkG (edited June 17, 2000).]
I belive that the perl version of else if is elsif. It's been about a month since I was working with perl, so I may be wrong, but I don't think soYep, I was right.
PS. Could I get the title freeciv porter?
------------------
Andy Black
----------
Mac Port manager for FreecivAndy Black
Comment
Comment