john wright wrote:
>
> Rob Dixon <[EMAIL PROTECTED]> wrote:  john wright wrote:
>>
>> john wright wrote:
>>
>>>   I have a text file,which contains following type of data,
>>>
>>>   my $Data = {
>>>     'Book1-6'    => {
>>>       'DESCRIPTION' =>  'Book1-6',
>>>       'URLS1-6' =>
>>>         "http://www.book1.com " .
>>>         "http://www.book2.com  " .
>>>         "http://www.book3.com  " .
>>>         "http://www.book4.com " .
>>>         "http://www.book5.com " .
>>>         "http://www.book6.com";,
>>>       'Book_PATH' =>
>>>         "/usr/httpd/Book1-6",
>>>     },
>>>
>>>     'BOOK11-66'    => {
>>>       'DESCRIPTION' =>  'Book11-66',
>>>       'URLS11-66' =>
>>>         "http://www.book11.com " .
>>>         "http://www.book22.com  " .
>>>         "http://www.book33.com  " .
>>>         "http://www.book44.com " .
>>>         "http://www.book55.com " .
>>>         "http://www.book66.com";,
>>>       'Book_PATH' =>
>>>         "/usr/httpd/Book11-66",
>>>     }
>>>   }
>>>
>>>
>>>   now i want following type of output from the above text file...
>>>
>>>   1.perl myprogram.lp URLS1-6
>>>
>>>   out put will be
>>>   "http://www.book1.com "
>>>   "http://www.book2.com " .
>>>   "http://www.book3.com " .
>>>   "http://www.book4.com " .
>>>   "http://www.book5.com " .
>>>   "http://www.book6.com";,
>>>
>>>
>>>   2.if i give perl myprogram.lp URLS11-66
>>>   output will be
>>>
>>>   "http://www.book11.com "
>>>   "http://www.book22.com " .
>>>   "http://www.book33.com " .
>>>   "http://www.book44.com " .
>>>   "http://www.book55.com " .
>>>   "http://www.book66.com";,
>>
>> Hello John
>>
>> Take a look at perldoc -f do. Using this function on your file will throw
>> away the lexical scalar $Data but will return the vaue of the hash reference
>> which is what you need. The code below gives you the desired results (except
>> that it doesn't print the trailing space separators between the URLs, which I
>> presume you don't need). It assumes the data you describe is in a file called
>> mydata.pl. Beware that the contents of this file will be executed faithfully
>> so if they contain Perl code that will destroy your system instead of the
>> data you expect then that is just what will happen!
>>
>> By the way, you may want to consider using an anonymous array for your list
>> of URLs instead of concatenating them into a space-delimited string.
>>
>> HTH,
>>
>> Rob
>>
>>
>> use strict;
>> use warnings;
>>
>> my $key = shift || '';
>>
>> my $data = do 'mydata.pl';
>>
>> foreach my $book (values %$data) {
>>    next unless my $urls = $book->{$key};
>>    print "$_\n" foreach $urls =~ /\S+/g;
>> }
>>
>
> Hi Rob,
>   Thanks for the reply,but when i am running your code like this
>   perl myprogrem.pl Boo1-6
> i am getting following error :
> "Can't use string ("1") as a HASH ref while "strict refs" in use at myprogrem.pl" at line "foreach my $book (values %$data) "
>
>   Could you please help me..
>   Thanks

Then your data isn't properly represented by the example you gave us. Please
post a couple of dozen lines from your actual data so we can see what you're
dealing with as there's little point in me trying to guess.

By the way, please bottom-post your replies as it makes longer threads much
easier to understand. Thanks.

Rob



--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to