Here's a little exercise that should demonstrate that Python is a more natural scripting language option for C/C++ programmers (and human beings in general) than Perl. This is but one of many possible examples.
The task: write code that passes a list into a function such that the function can modify the passed list (and not just a copy of the list).
void addItem(vector<string>& theList)
{
theList.push_back("xyz");
}
vector<string> aList;
aList.push_back("abc");
addItem(aList);
This would be pass-by-reference in C++. After the call to addItem, the aList will contain two strings: "abc" and "xyz".
sub addItem
{
my $listRef = shift;
push(@$listRef, 'xyz');
}
my @aList = ('abc');
addItem(\@aList);
Note the required use of many punctuation symbols. This is to accomplish a pass-by-reference.
It's actually fairly similar to the C++ (or more likely C) if we were to pass-by-pointer there.
You have to pass the list into addItem by reference, using a backslash to indicate
this in the function call. Then the function has to know it is receiving a reference, which is a scalar
(hence the $listRef). The scalar reference must be coerced into its actual type, which is a
list, by prepending the @ to the reference in the call to push. Once you
learn all these requirements, it becomes fairly easy to write this type of thing. But if you take
a step back and take a long gander at what is written, you should realize that it's pretty ugly.
And the first few attempts at this can be very frustrating.
def addItem(theList):
theList.append('xyz')
aList = ['abc']
addItem(aList)
Everything is passed by reference in Python, so no special handling is required.