# Writing a perl script to holding information for two genes

Basically I have a perl script in which I have an array (where each element of the array references a hash) and need to be able to print the array with a dumper function. Thus I need to be able to split the $line on white spaces and save into variables and then construct anonymous hash and push into @genes: #!/usr/bin/perl use strict; use warnings; use Data::Dumper; # print complex data structure my @genes; # declare the array while(<>) { # this means that as long as lines come from the pipe we keep going my$line = $_; # a line that come from the pipe (we go line by line) next unless$line =~ /^\d+/; # skip lines except those reporting genes
<split the $line on white spaces and save into variables> <anonymous hash and push into @genes> } print Dumper(\@genes); exit; I don't even know how to approach this, this is my first time perl scripting and I am really confused. Any insight would be extremely helpful. So far I have: my$gene = {'id' => $id, 'start' =>$start, 'end' => $end, 'frame' =$frame, 'score' => $score}; my @line_split = split(' ',$line);
my $id =$line_split [0], $start =$line_split [1], $end =$line_split [2], $frame =$line_split [3], $score =$line_split [4]
• What is the format of mys.coord2? Mar 14, 2018 at 6:19
• 00001 16 324 +1 0.929 00002 751 308 -2 0.911 Mar 14, 2018 at 8:25
• simply just contains two lines Mar 14, 2018 at 8:25
• Hi code_pink now the question is more specific, but we still don't know how is it failing, or why. Could you edit it further to include this information? Also if you would like to have some guidance explaining your reasoning with your code would be useful to explain why it is a good direction or not (this is a great tool to find the way to code). Also if you mark one answer as accepted, people (usually) won't answer further.
– llrs
Mar 15, 2018 at 16:30

Perhaps this small test script will help demonstrate some of the principles:

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

my @arr;

# define the current line
my $line = "foo\tbar\tbaz\n"; # remove the trailing newline character chomp$line;

# put the line's elements into an anonymous array
my ($a,$b, $c) = split('\t',$line);

# insert key-value pairs into anonymous hash
my $hash = {a =>$a, b => $b, c =>$c};

# add the hash table to the array
push @arr, $hash; # print the array print Dumper \@arr; Run this script and see what it prints out. • my ($id, $start,$end, $frame,$score) = split(' ', $line); my$hash = {id => $id, start => (at) start, end => (at)end, frame => (at) frame, score => (at) score}; Mar 14, 2018 at 9:16 • is this sort of in the right direction Mar 14, 2018 at 9:17 • my ($id, $start,$end, $frame,$score) = split('\t', $line); my$hash = (id => $id, start =>$start, end => $end, frame =>$frame, score = $score); Mar 14, 2018 at 9:23 • Sorry, that should be: my$hash = { ... } not using parentheses, but brackets. I can't edit my previous comment so hopefully this helps. Mar 14, 2018 at 18:46

The following Perl documentation pages should be informative:

• split - for splitting a scalar at all matches of a defined pattern
• perlreftut - discusses the approach of anonymous variables and how to combine them