
﻿ CHAPTER II AT SICCA Two days afterwards the Mercenaries left Carthage . They had each received a piece of gold on the condition that they should go into camp at Sicca , and they had been told with all sorts of caresses : " You are the saviours of Carthage ! But you would starve it if you remained there ; it would become insolvent . Withdraw ! The Republic will be grateful to you later for all this condescension . We are going to levy taxes immediately ; your pay shall be in full , and galleys shall be equipped to take you back to your native lands . " They did not know how to reply to all this talk . These men , accustomed as they were to war , were wearied by residence in a town ; there was difficulty in convincing them , and the people mounted the walls to see them go away . They defiled through the street of Khamon , and the Cirta gate , pell-mell , archers with hoplites , captains with soldiers , Lusitanians with Greeks . They marched with a bold step , rattling their heavy cothurni on the paving stones . Their armour was dented by the catapult , and their faces blackened by the sunburn of battles . Hoarse cries issued from their thick bears , their tattered coats of mail flapped upon the pommels of their swords , and through the holes in the brass might be seen their naked limbs , as frightful as engines of war . Sarissae , axes , spears , felt caps and bronze helmets , all swung together with a single motion . They filled the street thickly enough to have made the walls crack , and the long mass of armed soldiers overflowed between the lofty bitumen-smeared houses six storys high . Behind their gratings of iron or reed the women , with veiled heads , silently watched the Barbarians pass . The terraces , fortifications , and walls were hidden beneath the crowd of Carthaginians , who were dressed in garments of black . The sailors ' tunics showed like drops of blood among the dark multitude , and nearly naked children , whose skin shone beneath their copper bracelets , gesticulated in the foliage of the columns , or amid the branches of a palm tree . Some of the Ancients were posted on the platform of the towers , and people did not know why a personage with a long beard stood thus in a dreamy attitude here and there . He appeared in the distance against the background of the sky , vague as a phantom and motionless as stone . All , however , were oppressed with the same anxiety ; it was feared that the Barbarians , seeing themselves so strong , might take a fancy to stay . But they were leaving with so much good faith that the Carthaginians grew bold and mingled with the soldiers . They overwhelmed them with protestations and embraces . Some with exaggerated politeness and audacious hypocrisy even sought to induce them not to leave the city . They threw perfumes , flowers , and pieces of silver to them . They gave them amulets to avert sickness ; but they had spit upon them three times to attract death , or had enclosed jackal 's hair within them to put cowardice into their hearts . Aloud , they invoked Melkarth 's favour , and in a whisper , his curse . Then came the mob of baggage , beasts of burden , and stragglers . The sick groaned on the backs of dromedaries , while others limped along leaning on broken pikes . The drunkards carried leathern bottles , and the greedy quarters of meat , cakes , fruits , butter wrapped in fig leaves , and snow in linen bags . Some were to be seen with parasols in their hands , and parrots on their shoulders . They had mastiffs , gazelles , and panthers following behind them . Women of Libyan race , mounted on asses , inveighed against the Negresses who had forsaken the lupanaria of Malqua for the soldiers ; many of them were suckling children suspended on their bosoms by leathern thongs . The mules were goaded out at the point of the sword , their backs bending beneath the load of tents , while there were numbers of serving-men and water-carriers , emaciated , jaundiced with fever , and filthy with vermin , the scum of the Carthaginian populace , who had attached themselves to the Barbarians . When they had passed , the gates were shut behind them , but the people did not descend from the walls . The army soon spread over the breadth of the isthmus . It parted into unequal masses . Then the lances appeared like tall blades of grass , and finally all was lost in a train of dust ; those of the soldiers who looked back towards Carthage could now only see its long walls with their vacant battlements cut out against the edge of the sky . Then the Barbarians heard a great shout . They thought that some from among them ( for they did not know their own number ) had remained in the town , and were amusing themselves by pillaging a temple . They laughed a great deal at the idea of this , and then continued their journey . They were rejoiced to find themselves , as in former days , marching all together in the open country , and some of the Greeks sang the old song of the Mamertines : " With my lance and sword I plough and reap ; I am master of the house ! The disarmed man falls at my feet and calls me Lord and Great King . " They shouted , they leaped , the merriest began to tell stories ; the time of their miseries was past . As they arrived at Tunis , some of them remarked that a troop of Balearic slingers was missing . They were doubtless not far off ; and no further heed was paid to them . Some went to lodge in the houses , others camped at the foot of the walls , and the townspeople came out to chat with the soldiers . During the whole night fires were seen burning on the horizon in the direction of Carthage ; the light stretched like giant torches across the motionless lake . No one in the army could tell what festival was being celebrated . On the following day the Barbarian 's passed through a region that was covered with cultivation . The domains of the patricians succeeded one another along the border of the route ; channels of water flowed through woods of palm ; there were long , green lines of olive-trees ; rose-coloured vapours floated in the gorges of the hills , while blue mountains reared themselves behind . A warm wind was blowing . Chameleons were crawling on the broad leaves of the cactus . The Barbarians slackened their speed . They marched on in isolated detachments , or lagged behind one another at long intervals . They ate grapes along the margin of the vines . They lay on the grass and gazed with stupefaction upon the large , artificially twisted horns of the oxen , the sheep clothed with skins to protect their wool , the furrows crossing one another so as to form lozenges , and the ploughshares like ships ' anchors , with the pomegranate trees that were watered with silphium . Such wealth of the soil and such inventions of wisdom dazzled them . In the evening they stretched themselves on the tents without unfolding them ; and thought with regret of Hamilcar 's feast , as they fell asleep with their faces towards the stars . In the middle of the following day they halted on the bank of a river , amid clumps of rose-bays . Then they quickly threw aside lances , bucklers and belts . They bathed with shouts , and drew water in their helmets , while others drank lying flat on their stomachs , and all in the midst of the beasts of burden whose baggage was slipping from them . Spendius , who was seated on a dromedary stolen in Hamilcar 's parks , perceived Matho at a distance , with his arm hanging against his breast , his head bare , and his face bent down , giving his mule drink , and watching the water flow . Spendius immediately ran through the crowd calling him , " Master ! master ! " Matho gave him but scant thanks for his blessings , but Spendius paid no heed to this , and began to march behind him , from time to time turning restless glances in the direction of Carthage . He was the son of a Greek rhetor and a Campanian prostitute . He had at first grown rich by dealing in women ; then , ruined by a shipwreck , he had made war against the Romans with the herdsmen of Samnium . He had been taken and had escaped ; he had been retaken , and had worked in the quarries , panted in the vapour-baths , shrieked under torture , passed through the hands of many masters , and experienced every frenzy . At last , one day , in despair , he had flung himself into the sea from the top of a trireme where he was working at the oar . Some of Hamilcar 's sailors had picked him up when at the point of death , and had brought him to the ergastulum of Megara , at Carthage . But , as fugitives were to be given back to the Romans , he had taken advantage of the confusion to fly with the soldiers . During the whole of the march he remained near Matho ; he brought him food , assisted him to dismount , and spread a carpet in the evening beneath his head . Matho at last was touched by these attentions , and by degrees unlocked his lips . He had been born in the gulf of Syrtis . His father had taken him on a pilgrimage to the temple of Ammon . Then he had hunted elephants in the forests of the Garamantes . Afterwards he had entered the service of Carthage . He had been appointed tetrarch at the capture of Drepanum . The Republic owed him four horses , twenty-three medimni of wheat , and a winter 's pay . He feared the gods , and wished to die in his native land . Spendius spoke to him of his travels , and of the peoples and temples that he had visited . He knew many things : he could make sandals , boar-spears and nets ; he could tame wild beasts and could cook fish . Sometimes he would interrupt himself , and utter a hoarse cry from the depths of his throat ; Matho 's mule would quicken his pace , and others would hasten after them , and then Spendius would begin again though still torn with agony . This subsided at last on the evening of the fourth day . They were marching side by side to the right of the army on the side of a hill ; below them stretched the plain lost in the vapours of the night . The lines of soldiers also were defiling below , making undulations in the shade . From time to time these passed over eminences lit up by the moon ; then stars would tremble on the points of the pikes , the helmets would glimmer for an instant , all would disappear , and others would come on continually . Startled flocks bleated in the distance , and a something of infinite sweetness seemed to sink upon the earth . Spendius , with his head thrown back and his eyes half-closed , inhaled the freshness of the wind with great sighs ; he spread out his arms , moving his fingers that he might the better feel the cares that streamed over his body . Hopes of vengeance came back to him and transported him . He pressed his hand upon his mouth to check his sobs , and half-swooning with intoxication , let go the halter of his dromedary , which was proceeding with long , regular steps . Matho had relapsed into his former melancholy ; his legs hung down to the ground , and the grass made a continuous rustling as it beat against his cothurni . The journey , however , spread itself out without ever coming to an end . At the extremity of a plain they would always reach a round-shaped plateau ; then they would descend again into a valley , and the mountains which seemed to block up the horizon would , in proportion as they were approached , glide as it were from their positions . From time to time a river would appear amid the verdure of tamarisks to lose itself at the turning of the hills . Sometimes a huge rock would tower aloft like the prow of a vessel or the pedestal of some vanished colossus . At regular intervals they met with little quadrangular temples , which served as stations for the pilgrims who repaired to Sicca . They were closed like tombs . The Libyans struck great blows upon the doors to have them opened . But no one inside responded . Then the cultivation became more rare . They suddenly entered upon belts of sand bristling with thorny thickets . Flocks of sheep were browsing among the stones ; a woman with a blue fleece about her waist was watching them . She fled screaming when she saw the soldiers ' pikes among the rocks . They were marching through a kind of large passage bordered by two chains of reddish coloured hillocks , when their nostrils were greeted with a nauseous odour , and they thought that they could see something extraordinary on the top of a carob tree : a lion 's head reared itself above the leaves . They ran thither . It was a lion with his four limbs fastened to a cross like a criminal . His huge muzzle fell upon his breast , and his two fore-paws , half-hidden beneath the abundance of his mane , were spread out wide like the wings of a bird . His ribs stood severally out beneath his distended skin ; his hind legs , which were nailed against each other , were raised somewhat , and the black blood , flowing through his hair , had collected in stalactites at the end of his tail , which hung down perfectly straight along the cross . The soldiers made merry around ; they called him consul , and Roman citizen , and threw pebbles into his eyes to drive away the gnats . But a hundred paces further on they saw two more , and then there suddenly appeared a long file of crosses bearing lions . Some had been so long dead that nothing was left against the wood but the remains of their skeletons ; others which were half eaten away had their jaws twisted into horrible grimaces ; there were some enormous ones ; the shafts of the crosses bent beneath them , and they swayed in the wind , while bands of crows wheeled ceaselessly in the air above their heads . It was thus that the Carthaginian peasants avenged themselves when they captured a wild beast ; they hoped to terrify the others by such an example . The Barbarians ceased their laughter , and were long lost in amazement . " What people is this , " they thought , " that amuses itself by crucifying lions ! " They were , besides , especially the men of the North , vaguely uneasy , troubled , and already sick . They tore their hands with the darts of the aloes ; great mosquitoes buzzed in their ears , and dysentry was breaking out in the army . They were weary at not yet seeing Sicca . They were afraid of losing themselves and of reaching the desert , the country of sands and terrors . Many even were unwilling to advance further . Others started back to Carthage . At last on the seventh day , after following the base of a mountain for a long time , they turned abruptly to the right , and there then appeared a line of walls resting on white rocks and blending with them . Suddenly the entire city rose ; blue , yellow , and white veils moved on the walls in the redness of the evening . These were the priestesses of Tanith , who had hastened hither to receive the men . They stood ranged along the rampart , striking tabourines , playing lyres , and shaking crotala , while the rays of the sun , setting behind them in the mountains of Numidia , shot between the strings of their lyres over which their naked arms were stretched . At intervals their instruments would become suddenly still , and a cry would break forth strident , precipitate , frenzied , continuous , a sort of barking which they made by striking both corners of the mouth with the tongue . Others , more motionless than the Sphynx , rested on their elbows with their chins on their hands , and darted their great black eyes upon the army as it ascended . Although Sicca was a sacred town it could not hold such a multitude ; the temple alone , with its appurtenances , occupied half of it . Accordingly the Barbarians established themselves at their ease on the plain ; those who were disciplined in regular troops , and the rest according to nationality or their own fancy . The Greeks ranged their tents of skin in parallel lines ; the Iberians placed their canvas pavilions in a circle ; the Gauls made themselves huts of planks ; the Libyans cabins of dry stones , while the Negroes with their nails hollowed out trenches in the sand to sleep in . Many , not knowing where to go , wandered about among the baggage , and at nightfall lay down in their ragged mantles on the ground . The plain , which was wholly bounded by mountains , expanded around them . Here and there a palm tree leaned over a sand hill , and pines and oaks flecked the sides of the precipices : sometimes the rain of a storm would hang from the sky like a long scarf , while the country everywhere was still covered with azure and serenity ; then a warm wind would drive before it tornadoes of dust , and a stream would descend in cascades from the heights of Sicca , where , with its roofing of gold on its columns of brass , rose the temple of the Carthaginian Venus , the mistress of the land . She seemed to fill it with her soul . In such convulsions of the soil , such alternations of temperature , and such plays of light would she manifest the extravagance of her might with the beauty of her eternal smile . The mountains at their summits were crescent-shaped ; others were like women 's bosoms presenting their swelling breasts , and the Barbarians felt a heaviness that was full of delight weighing down their fatigues . Spendius had bought a slave with the money brought him by his dromedary . The whole day long he lay asleep stretched before Matho 's tent . Often he would awake , thinking in his dreams that he heard the whistling of the thongs ; with a smile he would pass his hands over the scars on his legs at the place where the fetters had long been worn , and then he would fall asleep again . Matho accepted his companionship , and when he went out Spendius would escort him like a lictor with a long sword on his thigh ; or perhaps Matho would rest his arm carelessly on the other 's shoulder , for Spendius was small . One evening when they were passing together through the streets in the camp they perceived some men covered with white cloaks ; among them was Narr ' Havas , the prince of the Numidians . Matho started . " Your sword ! " he cried ; " I will kill him ! " " Not yet ! " said Spendius , restraining him . Narr ' Havas was already advancing towards him . He kissed both thumbs in token of alliance , showing nothing of the anger which he had experienced at the drunkenness of the feast ; then he spoke at length against Carthage , but did not say what brought him among the Barbarians . " Was it to betray them , or else the Republic ? " Spendius asked himself ; and as he expected to profit by every disorder , he felt grateful to Narr ' Havas for the future perfidies of which he suspected him . The chief of the Numidians remained amongst the Mercenaries . He appeared desirous of attaching Matho to himself . He sent him fat goats , gold dust , and ostrich feathers . The Libyan , who was amazed at such caresses , was in doubt whether to respond to them or to become exasperated at them . But Spendius pacified him , and Matho allowed himself to be ruled by the slave , remaining ever irresolute and in an unconquerable torpor , like those who have once taken a draught of which they are to die . One morning when all three went out lion-hunting , Narr ' Havas concealed a dagger in his cloak . Spendius kept continually behind him , and when they returned the dagger had not been drawn . Another time Narr ' Havas took them a long way off , as far as the boundaries of his kingdom . They came to a narrow gorge , and Narr ' Havas smiled as he declared that he had forgotten the way . Spendius found it again . But most frequently Matho would go off at sunrise , as melancholy as an augur , to wander about the country . He would stretch himself on the sand , and remain there motionless until the evening . He consulted all the soothsayers in the army one after the other , --those who watch the trail of serpents , those who read the stars , and those who breathe upon the ashes of the dead . He swallowed galbanum , seseli , and viper 's venom which freezes the heart ; Negro women , singing barbarous words in the moonlight , pricked the skin of his forehead with golden stylets ; he loaded himself with necklaces and charms ; he invoked in turn Baal-Khamon , Moloch , the seven Kabiri , Tanith , and the Venus of the Greeks . He engraved a name upon a copper plate , and buried it in the sand at the threshold of his tent . Spendius used to hear him groaning and talking to himself . One night he went in . Matho , as naked as a corpse , was lying on a lion 's skin flat on his stomach , with his face in both his hands ; a hanging lamp lit up his armour , which was hooked on to the tent-pole above his head . " You are suffering ? " said the slave to him . " What is the matter with you ? Answer me ? " And he shook him by the shoulder calling him several times , " Master ! master ! " At last Matho lifted large troubled eyes towards him . " Listen ! " he said in a low voice , and with a finger on his lips . " It is the wrath of the Gods ! Hamilcar 's daughter pursues me ! I am afraid of her , Spendius ! " He pressed himself close against his breast like a child terrified by a phantom . " Speak to me ! I am sick ! I want to get well ! I have tried everything ! But you , you perhaps know some stronger gods , or some resistless invocation ? " " For what purpose ? " asked Spendius . Striking his head with both his fists , he replied : " To rid me of her ! " Then speaking to himself with long pauses he said : " I am no doubt the victim of some holocaust which she has promised to the gods ? --She holds me fast by a chain which people cannot see . If I walk , it is she that is advancing ; when I stop , she is resting ! Her eyes burn me , I hear her voice . She encompasses me , she penetrates me . It seems to me that she has become my soul ! " And yet between us there are , as it were , the invisible billows of a boundless ocean ! She is far away and quite inaccessible ! The splendour of her beauty forms a cloud of light around her , and at times I think that I have never seen her--that she does not exist--and that it is all a dream ! " Matho wept thus in the darkness ; the Barbarians were sleeping . Spendius , as he looked at him , recalled the young men who once used to entreat him with golden cases in their hands , when he led his herd of courtesans through the towns ; a feeling of pity moved him , and he said-- " Be strong , my master ! Summon your will , and beseech the gods no more , for they turn not aside at the cries of men ! Weeping like a coward ! And you are not humiliated that a woman can cause you so much suffering ? " " Am I a child ? " said Matho . " Do you think that I am moved by their faces and songs ? We kept them at Drepanum to sweep out our stables . I have embraced them amid assaults , beneath falling ceilings , and while the catapult was still vibrating ! --But she , Spendius , she ! -- " The slave interrupted him : " If she were not Hanno 's daughter-- " " No ! " cried Matho . " She has nothing in common with the daughters of other men ! Have you seen her great eyes beneath her great eyebrows , like suns beneath triumphal arches ? Think : when she appeared all the torches grew pale . Her naked breast shone here and there through the diamonds of her necklace ; behind her you perceived as it were the odour of a temple , and her whole being emitted something that was sweeter than wine and more terrible than death . She walked , however , and then she stopped . " He remained gaping with his head cast down and his eyeballs fixed . " But I want her ! I need her ! I am dying for her ! I am transported with frenzied joy at the thought of clasping her in my arms , and yet I hate her , Spendius ! I should like to beat her ! What is to be done ? I have a mind to sell myself and become her slave ! YOU have been that ! You were able to get sight of her ; speak to me of her ! Every night she ascends to the terrace of her palace , does she not ? Ah ! the stones must quiver beneath her sandals , and the stars bend down to see her ! " He fell back in a perfect frenzy , with a rattling in his throat like a wounded bull . Then Matho sang : " He pursued into the forest the female monster , whose tail undulated over the dead leaves like a silver brook . " And with lingering tones he imitated Salammbo 's voice , while his outspread hands were held like two light hands on the strings of a lyre . To all the consolations offered by Spendius , he repeated the same words ; their nights were spent in these wailings and exhortations . Matho sought to drown his thoughts in wine . After his fits of drunkenness he was more melancholy still . He tried to divert himself at huckle-bones , and lost the gold plates of his necklace one by one . He had himself taken to the servants of the Goddess ; but he came down the hill sobbing , like one returning from a funeral . Spendius , on the contrary , became more bold and gay . He was to be seen in the leafy taverns discoursing in the midst of the soldiers . He mended old cuirasses . He juggled with daggers . He went and gathered herbs in the fields for the sick . He was facetious , dexterous , full of invention and talk ; the Barbarians grew accustomed to his services , and he came to be loved by them . However , they were awaiting an ambassador from Carthage to bring them mules laden with baskets of gold ; and ever beginning the same calculation over again , they would trace figures with their fingers in the sand . Every one was arranging his life beforehand ; they would have concubines , slaves , lands ; others intended to bury their treasure , or risk it on a vessel . But their tempers were provoked by want of employment ; there were constant disputes between horse-soldiers and foot-soldiers , Barbarians and Greeks , while there was a never-ending din of shrill female voices . Every day men came flocking in nearly naked , and with grass on their heads to protect them from the sun ; they were the debtors of the rich Carthaginians and had been forced to till the lands of the latter , but had escaped . Libyans came pouring in with peasants ruined by the taxes , outlaws , and malefactors . Then the horde of traders , all the dealers in wine and oil , who were furious at not being paid , laid the blame upon the Republic . Spendius declaimed against it . Soon the provisions ran low ; and there was talk of advancing in a body upon Carthage , and calling in the Romans . One evening , at supper-time , dull cracked sounds were heard approaching , and something red appeared in the distance among the undulations of the soil . It was a large purple litter , adorned with ostrich feathers at the corners . Chains of crystal and garlands of pearls beat against the closed hangings . It was followed by camels sounding the great bells that hung at their breasts , and having around them horsemen clad from shoulder to heel in armour of golden scales . They halted three hundred paces from the camp to take their round bucklers , broad swords , and Boeotian helmets out of the cases which they carried behind their saddles . Some remained with the camels , while the others resumed their march . At last the ensigns of the Republic appeared , that is to say , staves of blue wood terminated in horses ' heads or fir cones . The Barbarians all rose with applause ; the women rushed towards the guards of the Legion and kissed their feet . The litter advanced on the shoulders of twelve Negroes who walked in step with short , rapid strides ; they went at random to right or left , being embarrassed by the tent-ropes , the animals that were straying about , or the tripods where food was being cooked . Sometimes a fat hand , laden with rings , would partially open the litter , and a hoarse voice would utter loud reproaches ; then the bearers would stop and take a different direction through the camp . But the purple curtains were raised , and a human head , impassible and bloated , was seen resting on a large pillow ; the eyebrows , which were like arches of ebony , met each other at the points ; golden dust sparkled in the frizzled hair , and the face was so wan that it looked as if it had been powdered with marble raspings . The rest of the body was concealed beneath the fleeces which filled the litter . In the man so reclining the soldiers recognised the Suffet Hanno , he whose slackness had assisted to lose the battle of the Aegatian islands ; and as to his victory at Hecatompylos over the Libyans , even if he did behave with clemency , thought the Barbarians , it was owing to cupidity , for he had sold all the captives on his own account , although he had reported their deaths to the Republic . After seeking for some time a convenient place from which to harangue the soldiers , he made a sign ; the litter stopped , and Hanno , supported by two slaves , put his tottering feet to the ground . He wore boots of black felt strewn with silver moons . His legs were swathed in bands like those wrapped about a mummy , and the flesh crept through the crossings of the linen ; his stomach came out beyond the scarlet jacket which covered his thighs ; the folds of his neck fell down to his breast like the dewlaps of an ox ; his tunic , which was painted with flowers , was bursting at the arm-pits ; he wore a scarf , a girdle , and an ample black cloak with laced double-sleeves . But the abundance of his garments , his great necklace of blue stones , his golden clasps , and heavy earrings only rendered his deformity still more hideous . He might have been taken for some big idol rough-hewn in a block of stone ; for a pale leprosy , which was spread over his whole body , gave him the appearance of an inert thing . His nose , however , which was hooked like a vulture 's beak , was violently dilated to breathe in the air , and his little eyes , with their gummed lashes , shone with a hard and metallic lustre . He held a spatula of aloe-wood in his hand wherewith to scratch his skin . At last two heralds sounded their silver horns ; the tumult subsided , and Hanno commenced to speak . He began with an eulogy of the gods and the Republic ; the Barbarians ought to congratulate themselves on having served it . But they must show themselves more reasonable ; times were hard , " and if a master has only three olives , is it not right that he should keep two for himself ? " The old Suffet mingled his speech in this way with proverbs and apologues , nodding his head the while to solicit some approval . He spoke in Punic , and those surrounding him ( the most alert , who had hastened thither without their arms ) , were Campanians , Gauls , and Greeks , so that no one in the crowd understood him . Hanno , perceiving this , stopped and reflected , swaying himself heavily from one leg to the other . It occurred to him to call the captains together ; then his heralds shouted the order in Greek , the language which , from the time of Xanthippus , had been used for commands in the Carthaginian armies . The guards dispersed the mob of soldiers with strokes of the whip ; and the captains of the Spartan phalanxes and the chiefs of the Barbarian cohorts soon arrived with the insignia of their rank , and in the armour of their nation . Night had fallen , a great tumult was spreading throughout the plain ; fires were burning here and there ; and the soldiers kept going from one to another asking what the matter was , and why the Suffet did not distribute the money ? He was setting the infinite burdens of the Republic before the captains . Her treasury was empty . The tribute to Rome was crushing her . " We are quite at a loss what to do ! She is much to be pitied ! " From time to time he would rub his limbs with his aloe-wood spatula , or perhaps he would break off to drink a ptisan made of the ashes of a weasel and asparagus boiled in vinegar from a silver cup handed to him by a slave ; then he would wipe his lips with a scarlet napkin and resume : " What used to be worth a shekel of silver is now worth three shekels of gold , while the cultivated lands which were abandoned during the war bring in nothing ! Our purpura fisheries are nearly gone , and even pearls are becoming exhorbitant ; we have scarcely unguents enough for the service of the gods ! As for the things of the table , I shall say nothing about them ; it is a calamity ! For want of galleys we are without spices , and it is a matter of great difficulty to procure silphium on account of the rebellions on the Cyrenian frontier . Sicily , where so many slaves used to be had , is now closed to us ! Only yesterday I gave more money for a bather and four scullions than I used at one time to give for a pair of elephants ! " He unrolled a long piece of papyrus ; and , without omitting a single figure , read all the expenses that the government had incurred ; so much for repairing the temples , for paving the streets , for the construction of vessels , for the coral-fisheries , for the enlargement of the Syssitia , and for engines in the mines in the country of the Cantabrians . But the captains understood Punic as little as the soldiers , although the Mercenaries saluted one another in that language . It was usual to place a few Carthaginian officers in the Barbarian armies to act as interpreters ; after the war they had concealed themselves through fear of vengeance , and Hanno had not thought of taking them with him ; his hollow voice , too , was lost in the wind . The Greeks , girthed in their iron waist-belts , strained their ears as they strove to guess at his words , while the mountaineers , covered with furs like bears , looked at him with distrust , or yawned as they leaned on their brass-nailed clubs . The heedless Gauls sneered as they shook their lofty heads of hair , and the men of the desert listened motionless , cowled in their garments of grey wool ; others kept coming up behind ; the guards , crushed by the mob , staggered on their horses ; the Negroes held out burning fir branches at arm 's length ; and the big Carthaginian , mounted on a grassy hillock , continued his harangue . The Barbarians , however , were growing impatient ; murmuring arose , and every one apostrophized him . Hanno gesticulated with his spatula ; and those who wished the others to be quiet shouted still more loudly , thereby adding to the din . Suddenly a man of mean appearance bounded to Hanno 's feet , snatched up a herald 's trumpet , blew it , and Spendius ( for it was he ) announced that he was going to say something of importance . At this declaration , which was rapidly uttered in five different languages , Greek , Latin , Gallic , Libyan and Balearic , the captains , half laughing and half surprised , replied : " Speak ! Speak ! " Spendius hesitated ; he trembled ; at last , addressing the Libyans who were the most numerous , he said to them : " You have all heard this man 's horrible threats ! " Hanno made no exclamation , therefore he did not understand Libyan ; and , to carry on the experiment , Spendius repeated the same phrase in the other Barbarian dialects . They looked at one another in astonishment ; then , as by a tacit agreement , and believing perhaps that they had understood , they bent their heads in token of assent . Then Spendius began in vehement tones : " He said first that all the Gods of the other nations were but dreams besides the Gods of Carthage ! He called you cowards , thieves , liars , dogs , and the sons of dogs ! But for you ( he said that ! ) the Republic would not be forced to pay excessive tribute to the Romans ; and through your excesses you have drained it of perfumes , aromatics , slaves , and silphium , for you are in league with the nomads on the Cyrenian frontier ! But the guilty shall be punished ! He read the enumeration of their torments ; they shall be made to work at the paving of the streets , at the equipment of the vessels , at the adornment of the Syssitia , while the rest shall be sent to scrape the earth in the mines in the country of the Cantabrians . " Spendius repeated the same statements to the Gauls , Greeks , Campanians and Balearians . The Mercenaries , recognising several of the proper names which had met their ears , were convinced that he was accurately reporting the Suffet 's speech . A few cried out to him , " You lie ! " but their voices were drowned in the tumult of the rest ; Spendius added : " Have you not seen that he has left a reserve of his horse-soldiers outside the camp ? At a given signal they will hasten hither to slay you all . " The Barbarians turned in that direction , and as the crowd was then scattering , there appeared in the midst of them , and advancing with the slowness of a phantom , a human being , bent , lean , entirely naked , and covered down to his flanks with long hair bristling with dried leaves , dust and thorns . About his loins and his knees he had wisps of straw and linen rags ; his soft and earthy skin hung on his emaciated limbs like tatters on dried boughs ; his hands trembled with a continuous quivering , and as he walked he leaned on a staff of olive-wood . He reached the Negroes who were bearing the torches . His pale gums were displayed in a sort of idiotic titter ; his large , scared eyes gazed upon the crowd of Barbarians around him . But uttering a cry of terror he threw himself behind them , shielding himself with their bodies . " There they are ! There they are ! " he stammered out , pointing to the Suffet 's guards , who were motionless in their glittering armour . Their horses , dazzled by the light of the torches which crackled in the darkness , were pawing the ground ; the human spectre struggled and howled : " They have killed them ! " At these words , which were screamed in Balearic , some Balearians came up and recognised him ; without answering them he repeated : " Yes , all killed , all ! crushed like grapes ! The fine young men ! the slingers ! my companions and yours ! " They gave him wine to drink , and he wept ; then he launched forth into speech . Spendius could scarcely repress his joy , as he explained the horrors related by Zarxas to the Greeks and Libyans ; he could not believe them , so appropriately did they come in . The Balearians grew pale as they learned how their companions had perished . It was a troop of three hundred slingers who had disembarked the evening before , and had on that day slept too late . When they reached the square of Khamon the Barbarians were gone , and they found themselves defenceless , their clay bullets having been put on the camels with the rest of the baggage . They were allowed to advance into the street of Satheb as far as the brass sheathed oaken gate ; then the people with a single impulse had sprung upon them . Indeed , the soldiers remembered a great shout ; Spendius , who was flying at the head of the columns , had not heard it . Then the corpses were placed in the arms of the Pataec gods that fringed the temple of Khamon . They were upbraided with all the crimes of the Mercenaries ; their gluttony , their thefts , their impiety , their disdain , and the murder of the fishes in Salammbo 's garden . Their bodies were subjected to infamous mutilations ; the priests burned their hair in order to torture their souls ; they were hung up in pieces in the meat-shops ; some even buried their teeth in them , and in the evening funeral-piles were kindled at the cross-ways to finish them . These were the flames that had gleamed from a distance across the lake . But some houses having taken fire , any dead or dying that remained were speedily thrown over the walls ; Zarxas had remained among the reeds on the edge of the lake until the following day ; then he had wandered about through the country , seeking for the army by the footprints in the dust . In the morning he hid himself in caves ; in the evening he resumed his march with his bleeding wounds , famished , sick , living on roots and carrion ; at last one day he perceived lances on the horizon , and he had followed them , for his reason was disturbed through his terrors and miseries . The indignation of the soldiers , restrained so long as he was speaking , broke forth like a tempest ; they were going to massacre the guards together with the Suffet . A few interposed , saying that they ought to hear him and know at least whether they should be paid . Then they all cried : " Our money ! " Hanno replied that he had brought it . They ran to the outposts , and the Suffet 's baggage arrived in the midst of the tents , pressed forward by the Barbarians . Without waiting for the slaves , they very quickly unfastened the baskets ; in them they found hyacinth robes , sponges , scrapers , brushes , perfumes , and antimony pencils for painting the eyes--all belonging to the guards , who were rich men and accustomed to such refinements . Next they uncovered a large bronze tub on a camel : it belonged to the Suffet who had it for bathing in during his journey ; for he had taken all manner of precautions , even going so far as to bring caged weasels from Hecatompylos , which were burnt alive to make his ptisan . But , as his malady gave him a great appetite , there were also many comestibles and many wines , pickle , meats and fishes preserved in honey , with little pots of Commagene , or melted goose-fat covered with snow and chopped straw . There was a considerable supply of it ; the more they opened the baskets the more they found , and laughter arose like conflicting waves . As to the pay of the Mercenaries it nearly filled two esparto-grass baskets ; there were even visible in one of them some of the leathern discs which the Republic used to economise its specie ; and as the Barbarians appeared greatly surprised , Hanno told them that , their accounts being very difficult , the Ancients had not had leisure to examine them . Meanwhile they had sent them this . Then everything was in disorder and confusion : mules , serving men , litter , provisions , and baggage . The soldiers took the coin in the bags to stone Hanno . With great difficulty he was able to mount an ass ; and he fled , clinging to its hair , howling , weeping , shaken , bruised , and calling down the curse of all the gods upon the army . His broad necklace of precious stones rebounded up to his ears . His cloak which was too long , and which trailed behind him , he kept on with his teeth , and from afar the Barbarians shouted at him , " Begone coward ! pig ! sink of Moloch ! sweat your gold and your plague ! quicker ! quicker ! " The routed escort galloped beside him . But the fury of the Barbarians did not abate . They remembered that several of them who had set out for Carthage had not returned ; no doubt they had been killed . So much injustice exasperated them , and they began to pull up the stakes of their tents , to roll up their cloaks , and to bridle their horses ; every one took his helmet and sword , and instantly all was ready . Those who had no arms rushed into the woods to cut staves . Day dawned ; the people of Sicca were roused , and stirring in the streets . " They are going to Carthage , " said they , and the rumour of this soon spread through the country . From every path and every ravine men arose . Shepherds were seen running down from the mountains . Then , when the Barbarians had set out , Spendius circled the plain , riding on a Punic stallion , and attended by his slave , who led a third horse . A single tent remained . Spendius entered it . " Up , master ! rise ! we are departing ! " " And where are you going ? " asked Matho . " To Carthage ! " cried Spendius . Matho bounded upon the horse which the slave held at the door . 