Perl newbie questions!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Perl newbie questions!
# 1  
Old 06-07-2009
Perl newbie questions!

Hi,

So I started to learn perl a few days ago, and I have some problems...

One of my problems...
PHP Code:
#!C:\Perl64\bin\perl.exe -w
use LWP::Simple;
print 
"Content-Type: Text/Plain\n\n";

sub pagelinks {
return @
all get($_[0]) =~ /href\s*=\s*"?([^"\s>]+)/gis;
}

@
pagelinks("http://website.com");

foreach 
$key (@a){
    print 
$key."\n";
        
        

so I tried using some regex I usualy have used in php with preg_match but they don't seem to work. So I got the above regex after searching google..
and tbh I don't understand it..
What I understand from it : href followed by none or more whitespaces followed by = followed by none or more whitespaces followed by 0 or 1 " and afterwards... I don';t get it at all! it's really frustrating.

my second problem..

let's assume I have this array :
@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");
I want to delete the element which is equal to "a".

foreach $key (@horse){
if ($key == "a"){
delete $horse[$key];}
}

the above code doesn't seem to work.. it deletes the @horse[-2] value. I have also tryied using $key =~ /a/ and (grep $key eq "a",@horse). All have failed me.. any suggestions? please...

Last edited by byte1918; 06-07-2009 at 01:55 PM..
# 2  
Old 06-07-2009
When you post perl code use the perl highlighter, not the php highlighter which can mangle some perl code.

Your shortcut character class in the regexp are wrong, the shortcut classes like a space need a backslash \s:

Code:
return @all = get($_[0]) =~ /href\s*=\s*"?([^\s>]+)/gis;

I don't know if that will make your code do anything useful but it at least corrects the mistake in the regex.
# 3  
Old 06-07-2009
Quote:
Originally Posted by byte1918
...
I want to delete the element which is equal to "a".
...
Code:
$
$ perl -e '{@horse = ("mdamdamad", "asdasda", "asdasd", "a"); foreach $i (@horse) {pop @horse,$i if $i eq "a"} print "@horse"}'
mdamdamad asdasda asdasd$
$

tyler_durden
# 4  
Old 06-07-2009
Quote:
Originally Posted by KevinADC
When you post perl code use the perl highlighter, not the php highlighter which can mangle some perl code.

Your shortcut character class in the regexp are wrong, the shortcut classes like a space need a backslash \s:

Code:
return @all = get($_[0]) =~ /href\s*=\s*"?([^\s>]+)/gis;

I don't know if that will make your code do anything useful but it at least corrects the mistake in the regex.
Sry about using perl code in the php code tag must of missed the <code> tag.

Anyway I know about escaping the metacharacters, and I did that, but dunno for what reason I copied it wrong, not sure. thx for pointing that out though :P

One more question :
Afaik in a sub $_[0],$_[1] refers to the first and second parameter which was sent to the function (correct me if im wrong please). So for example I have
Code:
#!C:\Perl64\bin\perl.exe -w
print "Content-Type: Text-plain\n\n";

@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",@horse);

sub getindex {
$string = $_[0];
@a = $_[1];
print $string."\n";
foreach $key (@a){
    print $key."\n";
}
}

the problem is that @a in getindex only gets the first value of @horse , and not the entire array. How do I manage to pass to it the whole array?
edit: i found out the answer I had to use @a= @_;

Last edited by byte1918; 06-07-2009 at 04:48 PM..
# 5  
Old 06-07-2009
Code:
#!C:\Perl64\bin\perl.exe -w
print "Content-Type: Text/plain\n\n";#<-- this is not necessary unless running as a CGI script

@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",@horse);

sub getindex {
   ($string,@a) = @_;
   print $string."\n";
   foreach $key (@a){
      print $key."\n";
   }
}

You're going to want to learn how to use references in perl really quickly insterad of trying to pass mixed data types like int he code above. An example:

Code:
#!C:\Perl64\bin\perl.exe -w
print "Content-Type: Text/plain\n\n";

@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",\@horse);

sub getindex {
   my ($string,$array_ref) = @_;
   print $string."\n";
   foreach $key (@{$array_ref}){
      print $key."\n";
   }
}

The first three tutorials on this page discuss references:

Tutorials - perldoc.perl.org

Also:

you will want to use "warnings" and "strict" pragmas and start declaring your variables properly when writing perl code.

Code:
#!C:\Perl64\bin\perl.exe
use warnings;
use strict;
print "Content-Type: Text/plain\n\n";

my @horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",\@horse);

sub getindex {
   my ($string, $array_ref) = @_;
   print $string."\n";
   foreach $key (@{$array_ref}){
      print $key."\n";
   }
}

Also, don't use $a and $b as private variables in your perl scripts. Perl uses them for sorting data.

The http header was also wrong, you had: Text-plain should be: Text/plain
# 6  
Old 06-07-2009
Quote:
Originally Posted by KevinADC
Code:
#!C:\Perl64\bin\perl.exe -w
print "Content-Type: Text/plain\n\n";#<-- this is not necessary unless running as a CGI script

@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",@horse);

sub getindex {
   ($string,@a) = @_;
   print $string."\n";
   foreach $key (@a){
      print $key."\n";
   }
}

You're going to want to learn how to use references in perl really quickly insterad of trying to pass mixed data types like int he code above. An example:

Code:
#!C:\Perl64\bin\perl.exe -w
print "Content-Type: Text/plain\n\n";

@horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",\@horse);

sub getindex {
   my ($string,$array_ref) = @_;
   print $string."\n";
   foreach $key (@{$array_ref}){
      print $key."\n";
   }
}

The first three tutorials on this page discuss references:

Tutorials - perldoc.perl.org

Also:

you will want to use "warnings" and "strict" pragmas and start declaring your variables properly when writing perl code.

Code:
#!C:\Perl64\bin\perl.exe
use warnings;
use strict;
print "Content-Type: Text/plain\n\n";

my @horse = ("mdamdamad" , "asdasda" ,"asdasd" ,"a");

getindex ("asd",\@horse);

sub getindex {
   my ($string, $array_ref) = @_;
   print $string."\n";
   foreach $key (@{$array_ref}){
      print $key."\n";
   }
}

Also, don't use $a and $b as private variables in your perl scripts. Perl uses them for sorting data.

The http header was also wrong, you had: Text-plain should be: Text/plain
thanks alot KevinADC your response was very helpful! Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Newbie Questions for AIX !!!

Hi Guys, I am new in this forum and new with AIX however not new with Power System. I have worked with iSeries for many years. Now supporting AIX on Power. Here are some basic questions I have. 1. I am using Putty to connect from my PC to the AIX boxes. Is there any other (better) program to... (6 Replies)
Discussion started by: 300zxmuro
6 Replies

2. Solaris

Solaris Newbie questions...

Hello everyone, I am brand spanking new to both Solaris and Unix. I thought I would give it a go after buying a SB2500 off ebay for a few hundred dollars. I am having some issues that I am not sure how to correct, and I am wondering if I can get a few pointers? The first one is that my system... (2 Replies)
Discussion started by: GeekMasterFlash
2 Replies

3. UNIX for Dummies Questions & Answers

LISP newbie's questions

Hello, I want to learn LISP, and I have a GNU/Linux OS. I first sought a LISP compiler/interpreter and was told that GNU Emacs has a LISP mode. But I couldn't get into LISP mode, nor I don't know how to use it when I get into LISP mode. How can I run LISP code under GNU Emacs? And if... (1 Reply)
Discussion started by: rayne
1 Replies

4. UNIX for Dummies Questions & Answers

unix questions for newbie

Hi Unix gurus, I know these are some easy questions. But i just want to be sure about them. Hope someone can help explain the following please? 1) if ] - What does the "-r" means? 2) isql -U $DBUSER -D $DBNAME -S $DSQUERY -w 1000 -s";" << testfile > $FILE - What does the -s";" mean and... (1 Reply)
Discussion started by: gholdbhurg
1 Replies

5. Linux

Questions of a newbie

I have been an apple customer for years now, and am not satisfied with the direction that they are going. So I just ordered my first PC notebook the other day. I have no desire to use windows, however with microsoft's hold on the market, I feel that I may have a hard time doing this. I want to... (2 Replies)
Discussion started by: Brycemb16
2 Replies

6. Shell Programming and Scripting

Newbie Questions

I am relatively new to both KSH and Unix scripting, and I would like some help getting my script up and running. I would like to have the script attempt various commands (tar, copy, gzip etc) and then write the results (error msg or success msg) to a temp file. I would then like an email sent to... (2 Replies)
Discussion started by: mharley
2 Replies

7. Linux

newbie questions on ntp and routes

RH 7.2 I have 2 unrelated questions - 1.) I have been able to configure and run ntp but cannot figure out how to start the service upon reboot. I have read the man pages for ntsysv - this is a manual action, but I want to drop a tarball of config files on a new installation and cannot... (1 Reply)
Discussion started by: jalburger
1 Replies

8. UNIX for Dummies Questions & Answers

buncha questions from a newbie

Even though I have been logging in to a UNIX shell at school to complete school projects and write programs, but I had never really worked in UNIX environment. But a couple of weeks back I got hooked on to Solaris 9OE, read a book, a tutorial, a document provided on the Sun Microsystems website,... (1 Reply)
Discussion started by: init-5
1 Replies

9. UNIX for Dummies Questions & Answers

A few newbie questions

Hi :) I just wanted to ask a few basic questions really. I'm telnetting to a remote host and I've finally found out that I'm using a csh shell. My questions are: 1. Is the somename@something, the user group logged in? 2. How do I change user? I'm really lost so I hope someone can help... (7 Replies)
Discussion started by: hellz
7 Replies
Login or Register to Ask a Question