Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Deletes All Records not just one

by tmharish (Friar)
on Feb 16, 2013 at 10:13 UTC ( #1019029=note: print w/ replies, xml ) Need Help??


in reply to Deletes All Records not just one

And putting together all of what the others have said ( and adding some sanity checks I follow when things start going wrong ) :

use strict ; use warnings ; sub del { my ( $delroadName, $delroadNumber ) = @_ ; # This line handles pa +rams for function, # moved to first pa +rt of function my $process_file = "data.txt"; # Variable name change +d to reflect action - # This kind of thin +g can mess things up later. my @data ; { # Adding additional scope to prevent missuse or error use of fileh +andle. open( my $data_file_handle, '<', "$process_file" ) # Changed to +3 param open and replaced bareword file handle. or die("Can't open file: $process_file"); # Changed || +to 'or' in case someone removes brackets for 'open' # Also +added file name to error message. @data = <$data_file_handle> ; # NOTE: 'my' removed t +o ensure scope. close( $data_file_handle ); } chomp( @data ); open( my $out_file_handle,'>', $process_file ) or die("Can't open file: $process_file"); # Modified as above. foreach my $line_from_file ( @data ) { # Chang +ed from for to foreach removed dependence on $_ my @field = split( /\:/, $line_from_file ); # next if( ( $field[0] eq $delroadName ) && ( $field[1] == $delroa +dNumber ) ); # Added brackets and changed $field[0] in both to [0] and [1] next if( ( $field[0] eq $delroadName ) && ( $field[1] == $delroadN +umber ) ); print $out_file_handle $line_from_file, "\n"; # Modified t +o print to file handle - Else the file will be truncated # Since you are open + is with '>' and will remain blank. } # close $output; close $process_file; # You want to close the file handle, not the + string. }

Update: Corrected stupid mistake as pointed out by tobyink below.


Comment on Re: Deletes All Records not just one
Download Code
Replies are listed 'Best First'.
Re^2: Deletes All Records not just one
by PilotinControl (Monk) on Feb 16, 2013 at 13:21 UTC

    Thanks for all of the information and the revised code worked it did delete the entries in the file and when i opened the data.txt file here was the input:


    delcarEntry=HASH(0x191920c)
    delcarEntry=HASH(0x191920c)
    delcarEntry=HASH(0x191920c)

      Try:

      print $out_file_handle $line_from_file, "\n";

      You're currently printing out the variable $_ which isn't being defined by any of the code you posted (but is being defined somewhere else to point to an object of some kind).

      package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1019029]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (7)
As of 2015-07-29 01:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (260 votes), past polls